SVN: ¿recibe todos los posts de confirmación para un file?

¿Hay alguna forma de get una buena list de todos los posts de confirmación orderados por file? Algo como esto (como se puede ver, no quiero los posts específicos de un determinado file, solo mostrar posts para la confirmación completa si el file fue parte de la confirmación, se repite bien):

-- index.php 2010-01-02 03:04:05 * added new paragraph 2010-01-01 03:04:05 * moved header out of index.php into header.php * header.php initial check-in 2009-12-31 03:04:05 * index.php initial check-in -- header.php 2010-01-03 03:04:05 * added new meta tags 2010-01-01 03:04:05 * moved header out of index.php into header.php * header.php initial check-in 

Información Adicional:

svn log filename hace algo similar, pero quiero que haga esto:

  1. Obtenga una list de files que han cambiado entre aaaa-mm-dd (r2) y aaaa-mm-dd (r4) (es decir,
      svn log -q -v -r 2: 4> changedfiles.txt 
  2. eliminar la basura extraña de changedfiles.txt
  3. svn registra cada file en esa list, como en:
      svn log <changedfiles.txt >> combinedlog.txt 

    (solo pseudocódigo, sé que svn log toma arguments no ingresados, pero no se puede molestar en escribirlos)

svn log filename mostrará todos los posts de confirmación asociados con el filename . El resultado será similar al siguiente:

 ------------------------------------------------------------------------ r1206 | kalebp | 2010-03-10 16:48:12 -0800 (Wed, 10 Mar 2010) | 1 line Introduce a TranslatorFacade. Make the jar runnable by default. ------------------------------------------------------------------------ r1085 | kalebp | 2010-03-02 17:10:28 -0800 (Wed, 04 Nov 2009) | 1 line Annotation checker now supports complete definitions and named parameters ------------------------------------------------------------------------ ... 

Si no desea información antes de una sucursal o copy, existe una --stop-on-copy que puede agregar. Consulte svn help log para get más información, como cómo especificar los intervalos de dates, etc.

EDITAR:

Puede tomar fácilmente un intervalo de dates usando svn log -r{20100101}:{20100331} . No me gusta la idea de llamar al logging de files modificados, por lo que recomendaría usar el indicador -v para get una list de los files que cambiaron en la confirmación.

Este es el process que usaría:

 svn log -r{20100101}:{20100331} -v --xml | xsltproc formatter.xsl - 

Y aquí está formatter.xsl:

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xsd" version="1.0" > <xsl:output method="text" indent="no" /> <xsl:key name="paths-key" match="/log/logentry/paths" use="path" /> <xsl:template match="log/logentry"> <xsl:for-each select="paths/path[count(. | key('paths-key', paths/path)[1]) = 1]"> <xsl:sort select="text()"/> -- <xsl:value-of select="text()" /> <xsl:for-each select="key('paths-key', .)/preceding-sibling::date"> <xsl:sort select="translate(text(), '-:.T','')"/> <xsl:variable name="selectedDate" select="text()"/> <xsl:value-of select="translate($selectedDate, 'T', ' ')"/><xsl:text> </xsl:text> <xsl:for-each select="following-sibling::msg"> * <xsl:variable name="msg" select="text()"/> <xsl:variable name="date" select="preceding-sibling::date/text()"/> <xsl:if test="$selectedDate = $date"> <xsl:text> </xsl:text> <xsl:value-of select="$msg"/> </xsl:if> </xsl:for-each> </xsl:for-each> </xsl:for-each> </xsl:template> </xsl:stylesheet> 

Me imagino que svn log --xml y algún tipo de línea de command XPath o XSLT serán tu mejor opción.

Con el command svn log

Probablemente necesites algo más que SVN para lograr esto programáticamente. Si .Net no es un problema, recomiendo SharpSVn . El código a continuación debería ayudarte a comenzar.

 var la = new SvnLogArgs { Start = 16077, End = 17445 }; Collection<SvnLogEventArgs> list; client.GetLog(new Uri(_respositoryPath), la, out list); foreach (SvnLogEventArgs a in list) { // ...jazz }