2009-02-20 16 views
19

Actualmente, simplemente me gustaría encontrar todos los archivos que no se han modificado en los últimos X días pero, en última instancia, me gustaría poder realizar consultas más complejas contra mi repositorio de subversión.¿Cómo puedo consultar mi repositorio de subversión?

¿Existe algún tipo de lenguaje de consulta de Subversion o API que pueda utilizar?

Respuesta

14

Puede utilizar svn log comando para producir un archivo XML con una gran cantidad de información acerca de todas las confirmaciones de esta manera:

svn log URL --xml --verbose > commits.xml 

Hay algunas opciones más que se puede jugar con para limitar el rango de revisión, obtener más información sobre los accesorios de revolución, incluir información de fusión, etc.

El problema se convierte en "cómo realizo consultas sobre el contenido de un documento XML", que es más fácil que trabajar con el las API existentes de SVN. Por ejemplo, en C# puede hacer LINQ queries on XML.

+1

En particular, el rango de revisión puede incluir un rango de fechas: [[svn log --verbose --revision '{2009-01-01}': '{2009-02-20} '--xml]] Ahora, determinar cuáles NO han cambiado requerirá un poco de procesamiento posterior. – phord

2

Actualmente no, no hay un lenguaje de consulta de subversión o una API basada en consultas que sea de uso generalizado (vale, ahora miren a alguien que me contradiga, así es la vida en la red, supongo).

Esto significa que está limitado a empalmar juntas las salidas de los comandos normales SVN como

svn info 

y

svn log 

Estoy seguro de algo así como bash o PowerShell podría hacer esto por lo menos factible. Si estás atascado con el lote de Windows, comenzaría a llorar ahora.

+2

Wow, ¿en serio? ¿Una gran necesidad de una herramienta útil para desarrolladores en cualquier plataforma y no existe? ¿Qué diablos estamos haciendo con nuestras tardes y noches? –

+1

En realidad, la mayoría de la información necesaria para el día a día está disponible fácilmente en el conjunto estándar de comandos. Es más raro querer encontrar una lista de archivos que no han sido modificados por un tiempo. Aunque mi mente ahora está ocupada creando SVNSQL, maldición. –

+1

Linq2Svn - demonios, eso suena bien –

1

Como ya se ha mencionado, svn log/info se puede combinar con comandos de shell para encontrar lo que desea. Alternativamente, puede usar directamente la propia API de SVN en C/C++ para procesar programéticamente entidades de repositorio. SVN tiene enlaces de Python. Si Java es el idioma de su elección, tratar http://svnkit.com/

16

Puede usar el proyecto SvnQuery (http://svnquery.tigris.org) que tiene la intención de proporcionar una interfaz de consulta para realizar tales consultas. Tiene una API .NET y una interfaz web, proporcionando el mismo lenguaje de consulta. Puede realizar consultas complejas con operadores, expresiones anidadas, comodines, frases y frases breves. El operador que solicite, calculando la diferencia entre ahora y la última fecha de compromiso, no está implementado, pero como es un proyecto de código abierto, puede ofrecerse como voluntario para hacerlo o publicar una solicitud de función para él :-)

2

Con PowerShell puede hacer algo agradable de consulta sobre los mensajes de registro

$data = [xml] (svn log -r "r1:r2" --xml) 
$data.log.logentry | where-object {$_.message -match "regex"} 

o incluso en los archivos modificados (con un poco de magia necesaria para evitar un problema de PowerShell conocido)

$diff = [xml] (svn diff -r "r1:r2" --xml --summarize | %{$_ -replace "item", "item1"}) 
$diff.diff.paths.path | where-object {$_.item1 -eq "file"} 
1

Además de utilizar una línea de comandos de Subversion o un cliente gráfico como TortoiseSVN para ver el historial del repositorio svn, puede instalar un avanzado interfaz web para repositorios Subversion.

Por ejemplo, en VisualSVN Server 3.2 y posterior, puede utilizar un visor de historial de revisión basado en la web, see the demo here.

Ver la descripción de the HTML5-based web svn client here.

1

Desde 1.7 SVN, la copia de trabajo tiene un archivo wc.db en el directorio .svn. Es una base de datos sqlite básica, por lo que es bastante fácil de consultar.

Debe asegurarse de que su copia de trabajo esté actualizada. Si está haciendo algo más que una selección rápida y simple, sería más seguro copiar el archivo en lugar de arriesgarse a romperlo.

La fecha de cambio se basa en la época de Unix. Por ejemplo:

sqlite3 .svn\wc.db "select changed_revision, datetime((changed_date/1000000),'unixepoch') changed_date, changed_author, repos_path from NODES" 
+0

Muchas gracias por 'changed_date/1000000'. Usted es el único que lo mencionó. – steven

Cuestiones relacionadas