He encontrado un comportamiento que no esperaba de Subversion, y lo descubrí casi accidentalmente: un archivo modificado no se marca como modificado.¿Por qué Subversion no marca un archivo de hoja de cálculo de Microsoft Excel modificado?
Tengo una prueba de unidad que implica una hoja de cálculo de Microsoft Excel como archivo de entrada. La prueba unitaria calcula una suma de comprobación CRC; mi prueba comenzó a fallar debido al cambio en la suma de comprobación.
El archivo de prueba se almacena en SVN, y tiene el tipo MIME "application/octet-stream", y por lo tanto se considera binario por SVN.
Obtengo el mismo comportamiento de TortoiseSVN y el cliente de línea de comandos SVN, en este caso ambos basados en SVN 1.6: cuando el archivo se abre en Excel, el hecho de que esté abierto debe codificarse en el archivo; SVN muestra que el archivo está modificado. Sin embargo, cuando el archivo se cierra de nuevo (sin guardar), parece volver a su estado no modificado: es decir, svn status
no muestra el archivo de Excel; svn diff
no produce salida de todos modos debido a que los datos son binarios.
El problema es que el archivo ahora no se compara binariamente con el archivo almacenado en el repositorio. (Si se exporta una copia nueva, no se compara binariamente con la copia abierta y cerrada.) El archivo aparentemente no se modifica desde el punto de vista del usuario, por lo que, en un sentido semántico, la respuesta SVN es razonable. Pero no sintácticamente; y SVN es esencialmente sintáctico.
La parte para la cual no puedo encontrar un motivo es porque SVN no marca el archivo como modificado. No puedo imaginar que SVN tenga un manejo especial para los archivos de Excel (y en cualquier caso el tipo MIME no es específicamente uno asociado con MS Excel); no hay una propiedad de palabra clave SNV definida. Del mismo modo, me imagino que Excel sabe algo sobre el contenido del subdirectorio .svn oculto en el que se almacena la información de copia de trabajo SVN.
¿Tiene alguna pista sobre lo que está pasando aquí?
Gracias, Rob.
Gracias. Sí, el problema es reproducible. Esto parece una explicación probable; Casi lo había dicho en mi comentario a la respuesta de Wim, pero es bueno tenerlo observado independientemente. Voy a verificar esto (en el trabajo, mañana). – Rhubbarb
Solo para confirmar: eso es exactamente lo que está pasando. Cuando se abre el archivo de Excel, el contenido del archivo cambia (como se puede ver con, por ejemplo, md5sum) y los cambios de hora modificados. Cuando el archivo se cierra sin guardar, el contenido del archivo no cambia, pero tampoco vuelve a su estado original; y el tiempo modificado vuelve al valor antes de abrir. – Rhubbarb
Acabo de encontrar esto: http://spreadsheetpage.com/index.php/oddity/who_last_opened_that_file/ parece que Excel guarda el nombre del abridor (y tal vez más), incluso si no guarda. Extraño. – Martin