¿Cómo obtener un informe de culpa svn recursivo en un solo archivo xml para todos los archivos no binarios en una rama?

StackOverflow https://stackoverflow.com/questions/413777

Pregunta

¿Cómo puedo obtener un informe de culpa svn totalmente recursivo para todos los archivos no binarios en una rama, donde la salida está en un solo archivo en formato xml e incluye revisión, fecha, autor, nombre de archivo y amp; ruta y el texto de la línea del archivo en sí? Toda la salida debe estar en un solo archivo. Se ejecutará como parte de la compilación a través de una instancia de CCNet.

Las herramientas disponibles son la última versión estable de nant y nantcontrib, msbuild y la última línea de comando svn.

Estos son algunos de los problemas con los que me he encontrado: el comando svn blame de la línea de comandos no admite la recursión de directorios. La opción --xml de Blame no incluye el texto real de cada línea, aunque tiene todo lo demás. Por defecto, nantcontrib pasa el parámetro --quiet (contrario a la referencia de la tarea), que no es compatible con el comando blame. La tarea svn de Nantcontrib puede no aceptar el parámetro --xml.

¿Fue útil?

Solución

La respuesta simple es que no hay una manera fácil de hacer esto. La mejor y más correcta forma sería escribir su propio cliente svn (o extender el existente) para que tenga la funcionalidad que necesita. Apenas trivial.

También hay una forma incorrecta de hacerlo, que también implica escribir código. No hagas esto :

find . -type f | grep -v .svn | xargs svn blame > line_data
find . -type f | grep -v .svn | xargs svn --xml blame > xml_data

Puede escribir los dos comandos svn juntos para evitar ejecutar find dos veces, pero esto seguirá siendo extremadamente lento. Para agregar insulto a la lesión, deberá analizar los dos archivos usted mismo para agregar las líneas de origen reales a los datos xml.

Lamentablemente, creo que este es el alcance del soporte para lo que quieres con el cliente svn estándar, y no puedo encontrar ningún otro cliente que haga las cosas mejor (algunos ni siquiera admiten culpa ).

Otros consejos

No sé qué sistema operativo está utilizando. Pero puede intentar usar un bucle FOR simple y el comando '' svn ls -R '' para enumerar recursivamente todos los archivos en su rama (espacio de trabajo / url) y luego canalizarlos a "svn blame --xml".

He probado esto en mi línea de comando SVN y funciona bien (Windows XP, SVN 1.4.4). El comando que utilicé es el siguiente:

FOR / F " usebackq delims == " % i IN ( svn ls -R http: // myurl / mybranch ) DO @svn culpa --xml% i

Nota: Puede evitar alguna "url no encontrada" tipo de errores si escribe este comando en un espacio de trabajo (que refleja la raíz de su rama) y usa 'svn ls -R` en lugar de la url en el comando anterior.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top