Pregunta

Estamos en el proceso de pasar a SVN.

Desafortunadamente para nosotros, somos auditados periódicamente, donde los auditores requieren información como:
Historias de cambios en archivos
Historial de acceso a SVN
Nuevos archivos agregados
Cambios en los archivos

¿Existe alguna herramienta que pueda producir estos informes para nosotros (o algunos de estos)?

¿Fue útil?

Solución

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

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

  2. ejecute <=> , es un solo archivo jar.

<=> proporciona una lista de métricas:

  • qué archivo ha cambiado más
  • cuántas líneas se agregan
  • quién está contribuyendo más

Otros consejos

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

svn log es el comando básico para obtener el archivo relacionado información que busca ...

Puede tener toda esa información solo 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.

SVN proporciona mucho de lo que pide directamente desde la línea de comandos:

  • Historial de cambios en un archivo / directorio específico: svn log /your/path le proporciona diferencias de código fuente, autores, fechas de registro, etc.
  • Nuevos archivos agregados: svnlook changed -r <rev> <path to repository> le da todos los archivos que fueron tocados en la revisión dada. Pase por todas las revisiones relevantes, y grep para & Quot; A & Quot; que denota archivos agregados.
  • Cambios en los archivos: svn diff -r <first rev>:<last rev> <path> le ofrece una diferencia de todo el período de revisiones
  • Historial de acceso a SVN: SVN obviamente mantiene un registro de todos los registros (ver svn log). En cuanto al acceso de lectura, no conozco un 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á altamente estructurada para que pueda hacer su propio formato fácilmente.

Aquí hay algunos que he usado antes para echar un vistazo a los informes y las tendencias de la actividad de cambio. El filtrado no es perfecto, pero puedes hacerte una 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].\/"

Elementos de configuración afectados:

%COMMAND% | find /c "/"

Conjuntos de cambios:

%COMMAND% | find /c "Changed paths"

Lista de archivos únicos que se han visto afectados en el rango de revisión dado (tenía Cygwin instalado):

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

Eche un vistazo a codesaga . Es un buen trabajo visualizar visualizaciones de control de código fuente. No puedo responder por la parte del informe.

Este programa podría ayudarlo, no con auditorías, sino con actualizaciones

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

  • Monitorear la fuente de ciertos eventos
  • Reciba notificaciones de cualquier tipo (ventanas emergentes de globo, iconos de bandeja, correo electrónico, sonidos, ...) cuando ocurran ciertos eventos

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

Esta pregunta también es un poco antigua, pero he creado un script que puede ser útil para informes / auditorías simples de Subversion y para realizar un seguimiento de los cambios realizados en un repositorio SVN y quería compartirlo. Se extrae la información sobre SVN se compromete de manera similar al comando " svnlook " Pero tiene un par de ventajas. Primero, permite iterar sobre todas las revisiones de un repositorio para realizar un seguimiento de todos los cambios realizados. En segundo lugar, el la información se imprime en un formato tabular separado por tabulaciones (como en los comandos de Unix como ps o df) que es legible para los humanos y fácil de analizar o importar en una hoja de cálculo, lo cual es excelente para informar. También se puede llamar o incrustado en un enlace posterior a la confirmación SVN.

Es un script de Perl llamado svn-commit-info.pl y toma 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 a consultar.

Si se ejecuta solo con la ruta del repositorio, imprime información STDOUT sobre los archivos afectados por todos los confirmaciones realizadas en el repositorio. Por ejemplo, suponiendo que el repositorio esté almacenado en / svn / repos / test en el Servidor de 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 tabulaciones son: la operación realizada, el número de revisión, la fecha y la hora, el autor de la revisión, el tamaño del archivo en bytes (a menos que el archivo sea un directorio marcado por la cadena " < DIR > ") y la ruta del archivo afectado en repositorio. Las primeras tres líneas contienen comentarios orientados al ser humano 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. hecho al archivo style.css:

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

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

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

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

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

Para buscar todos los archivos creados con tamaño > = 1Mb:

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

El script usa el comando estándar de Subversion " svnlook " pero por lo demás es autónomo. Ahí son dos funciones auxiliares para construir el comando y obtener la salida de " svnlook " y luego hace llamadas sucesivas a El comando para componer la salida. Requiere Subversion & Gt; = 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 la larga publicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top