2010-06-17 13 views
6

Deseo poder buscar dentro de los registros de confirmación de svn. Sé que puedes hacer eso en una tortuga, pero no pude encontrar la manera de usar la línea de comando.¿Cómo busco dentro de los registros de svn?

Estamos avanzando hacia un enfoque de repositorio de dos niveles, de modo que la rama estable solo obtendrá historias completamente completadas y probadas. Para lograr eso, necesitaríamos una forma de buscar dentro de los mensajes de confirmación el código del cuento (por ejemplo: # s1322) y obtener una lista de las revisiones que se utilizarán en un comando de fusión posterior.

Ex: searchsvnapp http://[repo ubicación raíz] # S1322

resultado: 4233,4249,4313

Respuesta

1

Terminé desarrollando mi propia herramienta, usando svnkit.

Más abajo está el bit principal del código que busca en los registros. Tuve que usar el "SVNWCUtil.createDefaultAuthenticationManager" usando una carpeta temporal para que no se metiera con la configuración svn de una herramienta svn de línea cmd que tengo en el mismo cuadro que debería ejecutar la herramienta. Si hay suficiente interés, puedo hacer que todo el webtool sea de código abierto. Por favor, hágamelo saber (¿votar la respuesta quizás?) Si está interesado.

public Collection<SVNLogEntry> searchSVN(String url, String name, 
     String password, long startRevision, long endRevision, 
     String searchTerm, String svnUser) throws Exception { 
    DAVRepositoryFactory.setup(); 
    SVNRepository repository = null; 
    repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url)); 
    // changed the config folder to avoid conflicting with anthill svn use 
    ISVNAuthenticationManager authManager = SVNWCUtil 
      .createDefaultAuthenticationManager(new File("/tmp"), name, 
        password, false); 
    repository.setAuthenticationManager(authManager); 
    Collection<SVNLogEntry> resultLogEntries = new LinkedList(); 
    Collection<SVNLogEntry> logEntries = repository.log(
      new String[] { "" }, null, startRevision, endRevision, true, 
      true); 
    for (SVNLogEntry svnLogEntry : logEntries) { 
     if (svnLogEntry.getMessage().indexOf(searchTerm) > -1) { 
      if ((svnUser == null || svnUser.equals("")) 
        || svnLogEntry.getAuthor().equals(svnUser)) { 
       resultLogEntries.add(svnLogEntry); 
      } 
     } 
    } 
    return resultLogEntries; 
} 
6

¿No sería este trabajo?

svn log | grep "something" 
+0

La mayoría de nuestros desarrolladores usan Windows y no tienen mucho conocimiento de Unix. Sería genial si fuera una herramienta que pudiera usarse en cualquier plataforma. – Emerson

+0

Puede instalar Cygwin en Windows y usar grep (entre otras excelentes utilidades de nix). Ni siquiera es tan desordenado de una instalación; es autónomo, y tú simplemente lo pones en tu camino. Te alegrarás de haber hecho el esfuerzo. Puede ser muy útil. –

+1

Uso [GnuWin utils] (http://gnuwin32.sourceforge.net/) para el entorno de Windows, por lo que el sistema operativo no es un problema aquí. Y canalizar varios programas simples es un concepto muy poderoso que debe aprender a trabajar de manera efectiva. – chalup

3

versión de Windows de la respuesta de the_void:

svn log | find "something" 
+0

Windows XP dice "buscar" no es un comando ... – Emerson

+0

Estoy ejecutando XP SP3 y está ahí para mí. También verificado presente en Vista y Win7. –

+0

Parece que muestra solo el contenido del registro, sin mostrar el número de revisión, que es lo que realmente necesito ... – Emerson

1

En primer lugar, asegúrese de que usted tiene la línea de comandos de Subversion (collabnet es la distro que uso) que coincide con su liberación de la tortuga 'subversión'. Consulte en el cuadro Tortuga sobre para encontrar la revisión de Subversion. Cada herramienta de subversión tiene su propia copia del cliente de Subversion, y no siempre son intercambiables. Las versiones principales romperán la compatibilidad.

Desde la línea de comandos:

svn log> svn.out

A continuación, el pop en su editor favorito!

+0

Sé que puedes hacer eso, pero esperaba algo un poco más directo ... De todos modos, estoy haciendo una aplicación web rápida usando svnkit para buscar un código en svn y devolver el comando correcto ... – Emerson

8

para Subversion 1.8 de forma natural (TM) es el uso de nuevas opciones --search + --search-and para los registros de filtrado

svn log --search #s1322 URL

Y, por cierto, cada historia puede ser separado en propia rama - en esta detección de caso del rango de revisión no es necesaria en absoluto y usted simplemente fusiona la sucursal

+0

¿Qué es # s1322 y URL en este ejemplo? ¿Ambos son patrones de búsqueda? – Exa

+0

@Exa - OP escribió "... busque dentro de los mensajes de confirmación para el código de la historia". La URL no es un patrón, es la URL del repositorio remoto –

Cuestiones relacionadas