Estoy tratando de corregir un error intermitente en git-svn. El problema está sucediendo en Windows XP solamente, con Cygwin git (perl v5.10.1) y msysGit (perl v5.8.8).permiso sysopen denegado
Con cualquier operación que implica una zona de alcance, soy capaz de conseguir un punto intermedio y luego la operación muere con un mensaje similar a
No se pudo abrir .git/SVN/refs/mandos a distancia/tronco /.rev_map.cc05479a-e8ea-436f-8d71-e07493b7796c.lock: dispositivo o recurso ocupado
en/usr/lib/git-core línea/git-svn 5240
Sin embargo, la cerradura exacta archivo y número de línea no son siempre lo mismo. He rastreado el problema real a la línea 3679
sysopen(my $fh, $db_lock, O_RDWR | O_CREAT)
Esto está creando un nuevo archivo .lock, y probé el equivalente en vano.
open(my $fh, ">", $db_lock)
que comprueba los permisos del directorio, y es drwxr-xr-x, por lo que no debería haber ningún problema, o si lo fueran, no serían tan inconsistente.
¿Podría ser porque la secuencia de comandos está creando y renombrando este archivo tantas veces en rápida sucesión que XP no puede manejarlo? EDITAR: mi sospecha es que este es el caso, porque cuando usé el depurador de perl y comencé la ejecución de cada sysopen manualmente, no hubo problemas para las 100 revisiones que obtuve.
EDIT: Algunos desarrolladores de Git preferirían descubrir la causa principal que ir con un truco que funciona (el enfoque correcto, creo). Entonces, ¿alguien puede ayudarme a encontrar al culpable negando mi permiso para abrir estos archivos .lock? Tengo una serie de herramientas que teóricamente podrían ser utilizados para este propósito, pero no acabo de llegar hasta el final: Explorador
- Proceso - muestra todos los mangos propiedad de un proceso, y también pueden buscar todos los procesos ser dueño de un mango determinado. Sin embargo, no funciona bien para procesos o manejadores efímeros (que es lo que hace git svn clone/fetch do)
- Unlocker: detecta cuando aparece un cuadro de diálogo genérico de "denegación de permiso" y encuentra el (los) mango (s) ofensivo (s) y ofertas para tratar con ellos. Sin embargo, no aparece cuando los programas no exploradores encuentran errores basados en archivos
En resumen, ¿hay alguna manera de obtener más información sin ser un empleado de Microsoft?
EDIT 2: Probablemente no sea Symantec, sino otro programa que tengamos funcionando en las computadoras en red. Tengo algunas personas investigándolo, y deberían poder al menos reducir la causa aquí.
Eso suena plausible. – Axeman
Entonces, ¿sería una buena solución agregar un bucle para reintentar hasta un cierto número de veces, o es demasiado pirateo? –
No equivaldría a 'O_RDWR | O_CREAT' be 'open (mi $ fh," + <", $ db_lock)'? – mob