2010-02-08 15 views
11

Antecedentes: escribir un script de publicación automatizado para exportar archivos modificados entre versiones de SVN y cargar en el servidor remoto.cómo detectar propiedades modificadas utilizando el registro SVN

El comando svn log muestra los archivos modificados y propiedades, pero parece que no distingue su salida detallada entre una modificación de contenido sobre modificaciones de propiedad.

Estoy leyendo esta salida mal, o hay una manera fácil de obtener una lista de ficheros cambiados entre revisiones ignorando prop cambios

Aquí está mi cmd muestra:

#: svn log "someurl" -r 2210:HEAD -v -q 

Output: 
------------------------------------------------------------------------ 
r2211 | author | 2010-02-08 12:36:56 +1300 (Mon, 08 Feb 2010) 
Changed paths: 
    M /branches/project/release-v1-r-maintenance 
    M /branches/project/release-v1-r-maintenance/offroot/ 
    M /branches/project/release-v1-r-maintenance/offroot/test.config 
------------------------------------------------------------------------ 

Los dos primeros son solo cambia de utilería (mergeinfo, ignora, etc.), mientras que el tercer elemento es una edición de contenido real y este es el elemento real que quiero capturar para evitar exportar toda la raíz.

¿Hay alguna forma de obtener/filtrar solo los cambios de contenido del registro svn u otro comando?

Respuesta

0

¿Funciona?

svn log --xml --with-no-revprops 
+0

no, no lo hace. esto solo influye en las propiedades de "revisión" – jeroenh

+0

Mi servidor svn es la versión 1.5.1 y --with-no-revprops no está disponible en svn-log cmd. ¿Es esta una característica más nueva? ¿Es hora de actualizar mi repositorio? – Dan

+0

@Dan: sí, es una característica nueva en 1.6 – jeroenh

1

Creo que la única forma de hacerlo es analizar realmente la salida del diff para cada revistion, sin embargo, que parece bastante frágil, y probablemente muy lento ...

Es así como una entrada de diff busca un archivo sólo con las propiedades modificadas:

c:\test\wc>svn diff -c 3 

Property changes on: test.txt 
___________________________________________________________________ 
Added: test 
    + test 

es así como una entrada de diff busca un archivo con contenidos modificados y cambiados propiedades:

c:\test\wc>svn diff -c 4 
Index: test.txt 
=================================================================== 
--- test.txt (revision 3) 
+++ test.txt (revision 4) 
@@ -1 +1,2 @@ 

+asdfads 

Property changes on: test.txt 
___________________________________________________________________ 
Added: someproperty 
    + somepropertyvalue 
+0

Sí, fue como evitar esa respuesta, ya que la salida parece desordenada y posiblemente poco confiable. Aunque esta es probablemente la única opción a menos que alguien más tenga algunas ideas. Suponiendo que la cadena 'Index: ' siempre aparece cuando hay un cambio de contenido, entonces creo que hay algún margen para el análisis. Hmm, gracias por la entrada. – Dan

4

Aquí hay una secuencia de comandos que acabo de escribir para obtener un registro detallado de todas las revisiones en las que cambia la propiedad dentro del directorio svn actual. Simplemente coloque la versión correcta de inicio y final donde adivine el cambio de propiedad. No es muy rápido, pero funciona.

#!/bin/bash 
# Show the verbose log of the revisions, where svn properties 
# inside the current folder where added/removed 
startrev=4600 
endrev=4620 
for i in $(eval echo {$startrev..$endrev}) 
    do 
    svn diff -c $i 2>/dev/null | grep "Property changes on" 1>/dev/null 
    if [ $? == 0 ]; then 
     echo "Property change in revision $i:" 
     svn log -r $i --verbose 
    fi 
done 
+0

Esto es muy útil, sin embargo, no parece funcionar (para mí). Estoy usando cygwin svn client y establecí el startrev en la revisión que sabía que había cambios de propiedad, y endrev al siguiente número de revisión. No hay salida para std out y 'echo $?' Da 0. – andersand

+0

Oh, parece que (sin querer) tengo una configuración regional diferente en mi cliente svn. Eso explica por qué grep no encuentra nada ^^ – andersand

1

Sé que esta pregunta ha sido contestada, pero en caso de que alguien quisiera una pequeña guía que he hecho este post sobre how to get get queryable data from svn log/diff (incluyendo scripts bash, XSLT y scripts de bases de datos Oracle). Hacer esto le permite ejecutar todo tipo de consultas útiles contra de la opinión v_svnlog

archivos "calientes" en este parche:

select path, count(*) num from v_svnlog 
group by path 
order by num desc, path asc 

la mayoría de las pruebas realizadas por el autor

select author, count(*) num from v_svnlog 
where path like '%Test%' 
group by author 
order by num desc 

y así sucesivamente ..

Cuestiones relacionadas