2009-01-21 24 views
6

Estamos en el proceso de mudarnos a SVN.¿Qué informes están disponibles para svn?

Por desgracia para nosotros, somos auditados periódicamente, donde los auditores requieren información como:
Historias de cambios en los archivos
Historia del acceso a SVN
Nuevos Ficheros incluidos
Los cambios en los archivos

¿Hay ¿una herramienta que puede producir estos informes para nosotros (o algunos de ellos)?

+0

¿Qué rastreador de problemas usas? Por lo general, un rastreador de problemas proporciona algunos informes del repositorio. – Joshua

+0

Utilizamos un rastreador de problemas personalizado, que no es compatible con nada. – Bravax

Respuesta

6

StatSVN es un generador de informes de subversión ligero. http://www.statsvn.org/

  1. primero generar el archivo de registro detallado - svn log

  2. plazo StatSVN, es un único archivo JAR.

StatSVN proporciona una lista de métrica:

  • qué archivo se cambió el más
  • cuántas líneas se añadió
  • que está contribuyendo con más
2

svn log es el comando básico para obtener la información relacionada con el archivo que está buscando ...

2

Usted puede tener toda esa información sólo a través de los registros de revisión de SVN. Es posible que desee considerar una buena herramienta como Fisheye para hacerlo por usted.

0

Eche un vistazo a codesaga. Hace un buen trabajo visualizando las confirmaciones de control de origen. No puedo responder por la parte de informes.

0

Este programa podría ayudarle a cabo, no con las auditorías, pero las actualizaciones

http://www.svnmonitor.com/default.shtml

  • Monitorear la fuente para ciertos eventos
  • recibir notificaciones de cualquier tipo (popups globo, iconos de la bandeja, correo electrónico , sonidos, ...) cuando ocurren ciertos eventos
4

Trac (http://trac.edgewall.com) puede usarse para ver los detalles del SVN. Trac tiene características agradables como una vista de conjunto de cambios que permite ver diferentes conjuntos de cambios (y avanzar o retroceder a través de ellos). También presenta una interfaz de usuario agradable, mucho mejor que ViewVC (www.viewvc.org)

+0

Además, también es un rastreador de problemas y un sistema de gestión de proyectos (asignar tareas a hitos, crear una hoja de ruta, etc.). – stpe

2

SVN proporciona gran parte de lo que pide la derecha desde la línea de comandos:

  • Historia de cambios en un archivo específico/directorio: svn log /your/path le proporciona diffs del código fuente, autores, fechas de check-in, etc.
  • Nuevos archivos agregados: svnlook changed -r <rev> <path to repository> le da todos los archivos que fueron tocados en la revisión dada. Bucle sobre todas las revisiones relevantes, y grep para "A" que denota archivos agregados.
  • Los cambios en los archivos: svn diff -r <first rev>:<last rev> <path> le da un diff por todo el lapso de revisiones
  • Historia del acceso a SVN: SVN, obviamente, mantiene un registro de todos los registros de entrada (ver svn log). En cuanto al acceso a la lectura, no conozco ningún mecanismo incorporado, sin embargo, probablemente pueda crear el suyo con poco esfuerzo, dependiendo de la configuración. Si solo permite el acceso http, puede usar los archivos de registro del servidor web.

No es bonito, pero la salida de SVN está muy estructurada para que pueda hacer su propio formateo fácilmente.

+0

svn log --xml le proporciona una salida de registro completa en xml que puede ser más fácil que analizar el texto libre. – jdkoftinoff

0

Para ver los accesos reales a SVN, necesitaría analizar los registros del servidor Apache (suponiendo que está sirviendo SVN sobre Apache).

1

Aquí hay algunos que he usado anteriormente para echar un vistazo a los informes y tendencias de las actividades de cambio.El filtrado no es perfecto, pero se puede conseguir la idea:

set REPO_URL=svn://localhost/... 
set REVISION_START=1 
set REVISION_END=HEAD 
set COMMAND=svn log %REPO_URL% -v -g -r %REVISION_START%:%REVISION_END% 
set REG_EXPRESSION="^...[ACDIMRX].\/" 

afectados Elementos de configuración:

%COMMAND% | find /c "/" 

Cambios:

%COMMAND% | find /c "Changed paths" 

Lista de archivos únicos que se han afectado a más de el rango de revisión dado (tuve cygwin instalado):

%COMMAND% | findstr /r %REG_EXPRESSION% | sort | uniq -u 
0

Esta pregunta se hace también un poco viejo, pero he creado un script que puede ser útil para informes/auditorías simples de Subversion y d para realizar un seguimiento de los cambios realizados en un repositorio SVN y quería compartirlo. Extrae información de acerca de las confirmaciones de SVN de forma similar al comando "svnlook", pero tiene un par de ventajas. En primer lugar, permite iterar sobre todas las revisiones de un repositorio para realizar un seguimiento de todos los cambios realizados. En segundo lugar, la información está impresa en un formato tabular separado por tabulaciones (como en comandos de Unix como ps o df) que es legible para los humanos y fácil de analizar o importar a una hoja de cálculo, lo cual es excelente para generar informes. También se puede llamar o incrustado en un enlace SVN post-commit.

Es una secuencia de comandos Perl llamada svn-commit-info.pl y tiene tres argumentos. El primero es la ruta del repositorio y es obligatorio. El segundo, opcional, es el patrón de archivo para buscar. Y el tercero, también opcional, es el número de revisión para consultar.

Si se ejecuta solo con la ruta del repositorio, imprime en STDOUT información sobre los archivos afectados por todas las confirmaciones realizadas en el repositorio. Por ejemplo, suponiendo que el repositorio se almacena en/svn/repos/prueba en el servidor Subversion:

$ perl svn-commit-info.pl /svn/repos/test 
# Repository: /svn/repos/test 
# Fields: Action, Revision, Date, Author, Bytes, Path 
# Actions: A = New, D = Deleted, U = Updated 
A 1  2017-01-31 17:21:19  Samsa  <DIR> TestProject/ 
A 2  2017-01-31 17:21:33  Samsa  815 TestProject/.project 
A 2  2017-01-31 17:21:33  Samsa  <DIR> TestProject/.settings/ 
A 2  2017-01-31 17:21:33  Samsa  564 TestProject/.settings/.jsdtscope 
A 2  2017-01-31 17:21:33  Samsa  <DIR> TestProject/www/ 
A 3  2017-01-31 17:27:48  David  355 TestProject/www/test.html 
A 3  2017-01-31 17:27:48  David  <DIR> TestProject/www/css/ 
A 3  2017-01-31 17:27:48  David  9622 TestProject/www/css/logo.jpg 
A 3  2017-01-31 17:27:48  David  1231 TestProject/www/css/reportstyle.css 
A 3  2017-01-31 17:27:48  David 168345 TestProject/www/css/style.css 
U 4  2017-02-01 10:48:34  Samsa 183260 TestProject/www/css/style.css 
D 5  2017-02-01 12:51:26  David  355 TestProject/www/test.html    

Los campos separados por tabuladores son: la operación realizada, el número de revisión, la fecha y hora, el autor de la revisión, el tamaño del archivo en bytes (a menos que el archivo sea un directorio marcado con la cadena "<DIR>") y la ruta del archivo afectado en el repositorio . Las tres primeras líneas contienen comentarios orientados a los humanos sobre el resultado.

La salida del comando anterior puede tardar mucho tiempo en completarse si el repositorio es grande, con muchos archivos o revisiones . Si desea realizar un seguimiento de los cambios realizados en un archivo en particular (o un conjunto de archivos), es mejor para especificar el patrón de archivo (que, de hecho, es una expresión regular de Perl). Por ejemplo, para obtener información sobre los cambios realizados en el archivo style.css:

$ perl svn-commit-info.pl /svn/repos/test style.css 

Si usted está interesado en una revisión en particular, puede especificar el tercer parámetro. Por ejemplo, imprimir todos los cambios de la tercera revisión, teniendo en cuenta que '.' coincide con cualquier carácter en un Perl expresiones regulares:

$ perl svn-commit-info.pl /svn/repos/test . 3 

Y, por supuesto, se podría aprovechar el poder de los filtros de Unix y la canalización para hacer consultas más complejas, por ejemplo, para encontrar todas las modificaciones realizadas por el usuario David:

$ svn-commit-info.pl /svn/repos/test | grep David 

permite encontrar todos los archivos creados con tamaño> = 1Mb:

$ svn-commit-info.pl /svn/repos/test | awk '$1 = "A" && $6 ~ /[0-9]/ && $6 >= 1024*1024' 

la secuencia de comandos utiliza el comando estándar subversión "svnlook "pero de lo contrario es autónomo". Hay son dos funciones auxiliares para construir el comando y obtener el resultado de "svnlook" y luego realiza llamadas sucesivas a el comando para componer el resultado. Requiere Subversion> = 1.7 y tiene probado en Perl 5.10.

#!/usr/bin/env perl 
use strict; 

my $SVNLOOKCMD = "/usr/bin/svnlook"; 
my @FIELDS = qw(Action Revision Date Author Bytes Path); 

# Builds and returns the "svnlook" command 
sub svnlook_cmd { 
    my($repository, $action, $revision, @varargs) = @_; 
    my $cmd = $SVNLOOKCMD; 
    $cmd.= " -r $revision" if $revision; 
    $cmd.= " $action '$repository'"; 
    $cmd.= join "", map { " '$_'" } @varargs; 
    $cmd.= '|'; 
    return $cmd; 
} 

# Executes the "svnlook" command and returns the output lines 
sub svnlook_output { 
    my($repository, $action, $revision, @varargs) = @_; 
    open(my $svnlookfh, svnlook_cmd $repository, $action, $revision, @varargs); 
    my @output = <$svnlookfh>; 
    close $svnlookfh; 
    chomp @output; 
    return wantarray ? @output : $output[0]; 
} 

my($repository, $file, $revision) = @ARGV; 
unless($repository) { 
    # 'repository' is the only mandatory argument 
    print STDERR "$0 <repository> [<file>] [<revision>]\n"; 
    print STDERR "\t<repository> = path of Subversion repository\n"; 
    print STDERR "\t<file> = file pattern to search for (regular expression)\n"; 
    print STDERR "\t<revision> = commit revision number\n"; 
    exit 1; 
} 
$file = "." unless $file; 
my $first = $revision ? $revision : 1; 
my $last = $revision ? $revision : svnlook_output $repository, "youngest"; 
print "# Repository: $repository\n"; 
print "# Fields: ", join(", ", @FIELDS), "\n"; 
print "# Actions: A = New, D = Deleted, U = Updated\n"; 
for(my $rev = $first; $rev <= $last; $rev++) { 
    my $author = ""; 
    my $date = ""; 
    foreach my $line (svnlook_output $repository, "changed", $rev) { 
     if($line =~ /$file/i) { 
      unless($date) { 
       $date = svnlook_output $repository, "date", $rev; 
       $date =~ s|^(\S+) (\S+).*$|\1 \2|; 
      } 
      $author = uc svnlook_output $repository, "author", $rev unless $author; 
      my($action, $path) = split /\s+/, $line, 2; 
      my $size; 
      if($path =~ m|/$|) { 
       $size = sprintf("%12s", "<DIR>"); 
      } else { 
       $size = svnlook_output $repository, "filesize", $rev, $path; 
       $size = sprintf("%12d", $size); 
      } 
      print join("\t", $action, $rev, $date, $author, $size, $path), "\n"; 
     } 
    } 
} 
exit 0; 

Espero que esto ayude y lo siento por el largo mensaje.

Cuestiones relacionadas