O relatório está disponível para SVN?
Pergunta
Estamos no processo de mudança para SVN.
Infelizmente para nós, são auditadas periodicamente, onde os auditores exigem informações como:
Histórias de alterações em arquivos
História de acesso ao SVN
Novos arquivos Adicionado
Alterações em arquivos
Existe uma ferramenta que pode produzir esses relatórios para nós (ou alguns deles)?
Solução
StatSVN
é um gerador de relatórios subversão peso leve.
http://www.statsvn.org/
StatSVN
fornece uma lista de métricas:
- qual arquivo é alterado o mais
- quantas linhas são adicionadas
- que está contribuindo mais
Outras dicas
Trac ( http://trac.edgewall.com ) pode ser usado para visualizar os detalhes do SVN. Trac tem características interessantes como uma visão de alterações que permite ver diferentes changesets (e voltar ou adiante através deles). Ele também apresenta uma interface de usuário agradável, muito melhor do que ViewVC (www.viewvc.org)
svn log é o comando básico para obter o arquivo relacionado informações que você está procurando ...
Você pode ter todas essas informações apenas através dos registros de revisão SVN. Você pode querer considerar uma boa ferramenta como Fisheye para fazê-lo para você embora.
SVN fornece muito do que você perguntar para a direita na linha de comando:
- História de mudanças para um arquivo específico / diretório:.
svn log /your/path
lhe dá diffs código-fonte, autores, check-in datas etc - Novos arquivos adicionados:
svnlook changed -r <rev> <path to repository>
dá-lhe todos os arquivos que foram tocados na revisão dado. Loop sobre todas as revisões relevantes egrep
para "A" que denota arquivos adicionados. - Alterações em arquivos:
svn diff -r <first rev>:<last rev> <path>
dá-lhe um diff por toda a extensão das revisões - História de acesso ao SVN: SVN, obviamente, mantém um registro de todos os check-ins (veja
svn log
). Como para a leitura de acesso, eu não sei de um mecanismo incorporado, no entanto, você provavelmente pode criar o seu próprio com pouco esforço, dependendo da configuração. Se você só permitir acesso HTTP, você pode usar arquivos de log do servidor web.
Não é bonito, mas a saída do SVN é altamente estruturado para que você possa fazer a sua própria formatação facilmente.
Aqui estão alguns que eu usei antes de dar uma olhada no relatório de actividade mudança e tendências. A filtragem não é perfeito, mas você pode obter a idéia:
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].\/"
Itens de Configuração Afetados:
%COMMAND% | find /c "/"
Changesets:
%COMMAND% | find /c "Changed paths"
Lista de arquivos originais que foram afetados pela determinado intervalo de revisão (eu tinha cygwin instalado):
%COMMAND% | findstr /r %REG_EXPRESSION% | sort | uniq -u
Dê uma olhada codesaga . Ele faz um bom trabalho de visualizar commits de controle de origem. Eu não posso garantir para a parte de relatório.
Este programa pode ajudá-lo, não com auditorias, mas atualizações
http://www.svnmonitor.com/default.shtml
- Monitor de origem para determinados eventos
- Receber notificações de qualquer tipo (popups balão, ícones da bandeja, e-mail, sons, ...) quando certos eventos ocorrem
Para ver acessos reais para SVN, você precisa analisar os logs do servidor Apache (supondo que você está servindo SVN sobre Apache).
Esta questão também é um pouco velho, mas eu criei um script que pode ser útil para simples relatórios / auditoria de Subversion e de manter o controle das alterações feitas em um repositório SVN e eu queria compartilhá-lo. ele extrai informações sobre SVN compromete de forma semelhante ao "svnlook" de comando, mas tem um par de vantagens. Primeiro, ele permite para iterar sobre todas as revisões de um repositório para manter o controle de todas as alterações feitas. Em segundo lugar, o a informação é impressa num formato tabular separados-guia (como em comandos Unix, como ps ou DF), que é ao mesmo tempo legível e fácil de analisar ou para importação para uma folha de cálculo, o que é excelente para a comunicação. Ele também pode ser chamado ou incorporado em um SVN post-commit gancho.
É um script Perl chamado svn-commit-info.pl e leva três argumentos. O primeiro é o caminho do repositório e é obrigatório. O segundo, opcional, é o padrão de arquivo para pesquisa. E o terceiro, também opcional, é o número de revisão para consulta.
Se executado apenas com o caminho do repositório, ele imprime à informação STDOUT sobre os arquivos afetados por toda a compromete feita no repositório. Por exemplo, assumindo que o repositório é armazenado em / svn / repos / teste no 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
Os campos separados por tabulação são: a operação realizada, o número de revisão, a data ea hora, o autor da revisão, o tamanho do arquivo em bytes (a menos que o arquivo é um diretório marcado pela string "
A saída do comando anterior pode levar um longo tempo para concluir se o repositório é grande, com muitos arquivos ou revisões. Se você quiser manter um registro das alterações feitas em um arquivo particular (ou um conjunto de arquivos), é melhor para especificar o padrão de arquivo (que, na verdade, é uma expressão regular Perl). Por exemplo, para obter informações sobre as alterações feito para o style.css arquivo:
$ perl svn-commit-info.pl /svn/repos/test style.css
Se você está interessado em uma revisão particular, você pode especificar o terceiro parâmetro. Por exemplo, para imprimir todas as mudanças da terceira revisão, tendo em conta que ''. corresponde a qualquer caractere em uma expressão regular Perl:
$ perl svn-commit-info.pl /svn/repos/test . 3
E, claro, você pode aproveitar o poder de filtros Unix e canalizando para fazer consultas mais complexas, por exemplo, para encontrar todas as modificações feitas pelo usuário David:
$ svn-commit-info.pl /svn/repos/test | grep David
Para encontrar todos os arquivos criados com tamanho> = 1Mb:
$ svn-commit-info.pl /svn/repos/test | awk '$1 = "A" && $6 ~ /[0-9]/ && $6 >= 1024*1024'
O script usa o comando Subversion "svnlook" padrão, mas caso contrário, é auto-contido. Lá são duas funções auxiliares para construir o comando e obter a saída do "svnlook" e, em seguida, mades chamadas sucessivas para o comando para compor a saída. Ela exige Subversion> = 1.7 e tem foi testada em 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 isso ajude e desculpe pelo longo post.