2009-08-04 6 views
19

¿Cuál es la forma más fácil de determinar cuándo se configuró una propiedad en un archivo o carpeta? Básicamente, estoy buscando un equivalente de "svn culpa" que funcione en propiedades.¿Cómo se obtiene el historial de una propiedad de archivo/carpeta en SVN?

El subcomando de registro permite obtener el historial completo de un archivo o carpeta, incluso cuando las propiedades se han modificado. Sin embargo, no distingue entre una modificación de la propiedad y otros tipos de modificación, lo que por supuesto también significa que no le informará nada sobre el historial de una propiedad en particular.

El comando de estado diferencia entre propiedades y otros tipos de modificaciones, pero solo funciona en la copia de trabajo.

La culpa, en sí misma, solo admite archivos, no directorios, y funciona en el contenido, no en las propiedades.

Ideas?

Respuesta

8

Lo mejor que puedo pensar es escribir un pequeño script o aplicación que use el comando svn propget para volcar el valor actual de la propiedad a un archivo de texto, y luego retroceder las revisiones volcando la propiedad a otro archivo de texto y comparando los dos. Tan pronto como detecta un cambio, imprime el número de revisión (en realidad, el número de revisión posterior que realizó el cambio) junto con el usuario que lo cometió.

Aquí hay un ejemplo del comando para volcar la propiedad svn: ignore para el directorio de diccionario en la revisión 80:

svn propget -r 80 svn:ignore dictionary 
+0

Voy a tomar la falta de mejores opciones que la respuesta que no hay manera listo para hacer esto. Ah bueno. –

+0

Lo bueno de esto es que la persona que cometió esa revisión no es necesariamente la persona que cambió la propiedad. –

+0

No entiendo, @anonfunc, ¿cómo podría alguien más cambiar la propiedad? Creo que la primera revisión que contiene el nuevo valor de propiedad es siempre la revisión que cometió el cambio. –

1
#!/bin/bash 
# This is not a great solution, but it works for gathering the data 

CURRENT_REVISION=95300 
OLDEST_REVISION=93000 
URL="file:///home/svn/repo/project/dir/target.c" 
PROPERTY_NAME="svn:externals" 

for i in `seq $OLDEST_REVISION $CURRENT_REVISION` 
do 
    svn -r$i propget "$PROPERTY_NAME" "$URL" | sed -e "s/^/$i\t/" 
done 
7

Una forma de obtener una lista de cuando las propiedades de una carpeta determinada que ha cambiado es:

svn log -v . |grep " M /trunk/datacenter$" -B2 

que da el siguiente resultado:

r963 | someuser | 2013-08-26 20:32:37 +0200 (Mon, 26 Aug 2013) | 4 lines 
Changed paths: 
    M /trunk/datacenter 
-- 
r908 | someotheruser | 2013-08-15 12:15:03 +0200 (Thu, 15 Aug 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 
-- 
r413 | someuser | 2013-04-26 09:02:08 +0200 (Fri, 26 Apr 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 

A continuación se puede ver en cada revisión para ver qué ha cambiado:

$ svn diff -c963 

en la parte inferior:

... 

Property changes on: . 
___________________________________________________________________ 
Modified: svn:ignore 
## -22,3 +22,5 ## 

.idea 
.classpath 
+ 
+dev-config.groovy 

Contras:

  • No hay manera de especificar qué propiedad que le interesado en
  • Tedious

Nota: No estoy seguro -B2 es suficiente en todos los casos, ya que la línea "M/trunk/centro de datos" podría no ser la primera línea

+0

La mejor respuesta, hace una vota hacía esto hace mucho tiempo. Es difícil de creer que Subversion no proporcione una forma nativa de filtrar el registro para este tipo de detalles. – javabrett

0

Mi svn-extensions caja de herramientas tiene ahora svn-prop-annotate y (como una especialización) svn-mergeinfo-annotate comandos. Tienen un bajo rendimiento (porque ejecutan svn log y svn diff por cada cambio potencial), y aún pueden tener algunas dependencias y perculiarities a mi estilo de trabajo particular, pero pruébalos si estás lo suficientemente desesperado.

Aquí hay un ejemplo de salida:

$ svn-mergeinfo-annotate --author karkat -l 5 
67645 ingo.karka Merged /branches/1.50/foobar:r67488 
67423 ingo.karka Merged /branches/1.50/foobar:r67315,67331 
67339 ingo.karka Merged /branches/1.50/foobar:r67279 
53320 ingo.karka Merged /branches/foo-1.01:r53317 
Cuestiones relacionadas