update tortoise subir repositorio proyecto excluir desvincular conflictos con como carpeta archivos actualizar svn logging shell

tortoise - svn conflictos



SVN-¿Obtener todos los mensajes de confirmación para un archivo? (4)

¿Hay alguna forma de obtener una buena lista de todos los mensajes de confirmación ordenados por archivo? Algo como esto (como puede ver, no quiero los mensajes específicos de un determinado archivo, solo mostrar mensajes para la confirmación completa si el archivo era parte de la confirmación, se repite):

-- 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. obtener una lista de archivos 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. tira de mierda extraña de changedfiles.txt
  3. svn registra cada archivo en esa lista, como en:

    svn log < changedfiles.txt >> combinedlog.txt (solo pseudocódigo, sé que svn log toma argumentos no se ingresan, pero no se puede molestar en escribirlos)


Con el comando svn log


Me imagino que svn log --xml y algún tipo de línea de comandos XPath o XSLT será su mejor apuesta.


Probablemente necesite algo más que SVN para lograr esto mediante programación. Si .Net no es un problema, recomiendo SharpSVn . El código de abajo debería hacerte comenzar un poco.

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 }


svn log filename mostrará todos los mensajes de confirmación asociados con el filename . La salida será similar a la 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 copia, puede agregar una --stop-on-copy . Consulte el svn help log para obtener más información, como por ejemplo, cómo especificar rangos de fechas, etc.

EDITAR:

Puede capturar fácilmente por un rango de fechas usando svn log -r{20100101}:{20100331} . No me gusta la idea de llamar al registro para los archivos modificados, así que recomiendo usar el indicador -v para obtener una lista de los archivos que se modificaron en la confirmación.

Aquí está el proceso que yo usaría:

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

Y aquí está el 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>