Obtiene la list de files de los últimos N commits en Subversion

¿Es posible get una list de files de los últimos N commits en Subversion?

Me gustaría ejecutar la tarea de optimization de image para los files en el repository de Subversion, y no quiero ejecutar files completos.

Para get las últimas N confirmaciones, use el --limit or -l para svn log . Alternativamente, también puede limitar sus inputs de logging por número de revisión y / o por date.

Para cambiar los files, debe usar el indicador -v (o --verbose ).

Y para suprimir el text del logging, debe usar el --quiet -q (o --quiet ).

Poniendo todo junto, para get (por ejemplo) todos los files modificados desde el comienzo de mayo de 2014 (en formatting fácil de analizar), puede hacer esto:

 svn log --quiet --verbose --revision {2014-05-01}:HEAD svn log -q -v -r {2014-05-01}:HEAD 

o para get la misma información para las últimas 10 confirmaciones, sin importar cuándo sucedieron:

 svn log --quiet --verbose --limit 10 svn log -q -v -l 10 

No existe un solo command de Subversion que le proporcione esa información.

Hay algunos cabos sueltos aquí:

  • ¿Te refieres a las últimas revisiones del directory (proyecto) en el que te encuentras o de todo el repository? Si está hablando del repository completo, puede get la última revisión y luego restar el número que desea. Si estás hablando del proyecto individual, se vuelve mucho más difícil.

  • Supongo que quiere una list que no contenga duplicates.

  • ¿Qué pasa con los files que se agregaron o eliminaron? ¿Cómo quieres contar eso?

Esto no es tan difícil como parece, pero tendrás que escribir tu propio script para hacer esto. El svn log toma un parámetro --xml y devolverá el logging en formatting XML. El formatting se ve así:

 $ svn log -v --xml $REPO <?xml version="1.0" encoding="UTF-8"?> <log> <logentry revision=...> <author>...</author> <date>...</date> <paths> <path .... .... action=".">...name of file...</path> <path ... </paths> <msg>.....</msg> </logentry> <logentry .... .... 

Incluso si no analiza el XML en sí, puede usar fácilmente el resultado XML para get la información que necesita. Cuente el número de líneas de <logentry hasta que obtenga el número o las inputs que desea. Use la <path para marcar el comienzo de la element, and when you see the closing > , you know that the rest of the line till the `es el nombre del file. Almacene estos files en una variable hash marcada por el nombre del file.

Un script en Python o Perl debería ser bastante fácil de hacer.

Etiquetaste tu pregunta como "caparazón", así que es probable que no estés en Windows, pero en la improbabilidad que tengas, puedes hacer casi cualquier cosa en una línea de PowerShell (sustituye el valor de "n" por "99" en este receta):

 PS> Get-SvnLog | Select -First 99 -ExpandProperty Paths | % { ([xml]$_).SelectNodes("//path/text()").Value } | Sort -Unique 

Puede ver la API para Get-SvnLog en mi estantería de código abierto , que incluye más de otros 20 ejemplos de informes que puede get. Abra el "libro" de PowerShell y vaya a SvnTools. Descargue el código aquí .