Question

Nous sommes en train de passer à SVN.

Malheureusement pour nous, nous sommes audités périodiquement. Les auditeurs ont besoin d'informations telles que:
Historique des modifications apportées aux fichiers
Historique d'accès à SVN
Nouveaux fichiers ajoutés
Changements dans les fichiers

Existe-t-il un outil permettant de générer ces rapports pour nous (ou certains d'entre eux)?

Était-ce utile?

La solution

StatSVN est un générateur de rapport de sous-version léger. http://www.statsvn.org/

  1. générez tout d'abord le fichier journal détaillé - svn log

  2. exécutez <=> , il s'agit d'un fichier jar unique.

<=> fournit une liste de métriques:

  • quel fichier a le plus changé
  • combien de lignes sont ajoutées
  • qui contribue plus

Autres conseils

Trac ( http://trac.edgewall.com ) peut être utilisé pour afficher les détails du SVN. Trac a des fonctionnalités intéressantes comme une vue de jeu de modifications qui permet de voir différents jeux de modifications (et de les parcourir). Il présente également une belle interface utilisateur, bien meilleure que ViewVC (www.viewvc.org)

svn log est la commande de base pour obtenir le fichier associé. informations que vous recherchez ...

Vous pouvez obtenir toutes ces informations uniquement via les journaux de révision SVN. Vous voudrez peut-être envisager un outil intéressant, tel que Fisheye , pour le faire à votre place.

SVN fournit une grande partie de ce que vous demandez directement depuis la ligne de commande:

  • Historique des modifications apportées à un fichier / répertoire spécifique: svn log /your/path vous donne les diffs de code source, les auteurs, les dates d’enregistrement, etc.
  • Nouveaux fichiers ajoutés: svnlook changed -r <rev> <path to repository> vous donne tous les fichiers qui ont été touchés dans la révision donnée. Boucle sur toutes les révisions pertinentes et grep pour & Quot; A & Quot; qui désigne les fichiers ajoutés.
  • Modifications dans les fichiers: svn diff -r <first rev>:<last rev> <path> vous donne un diff pour l'ensemble des révisions
  • Historique des accès au SVN: SVN tient évidemment un journal de tous les enregistrements (voir svn log). En ce qui concerne l'accès en lecture, je ne connais pas de mécanisme intégré, mais vous pouvez probablement créer le vôtre avec peu d'effort, en fonction de la configuration. Si vous autorisez uniquement l'accès http, vous pouvez utiliser les fichiers journaux du serveur Web.

Ce n'est pas beau, mais la sortie de SVN est très structurée pour vous permettre de faire votre propre formatage facilement.

En voici quelques-unes que j'ai déjà utilisées pour jeter un coup d'œil sur les rapports et les tendances en matière d'activités de changement. Le filtrage n'est pas parfait, mais vous pouvez vous faire une idée:

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].\/"

Éléments de configuration concernés:

%COMMAND% | find /c "/"

Changesets:

%COMMAND% | find /c "Changed paths"

Liste des fichiers uniques qui ont été affectés sur la plage de révision donnée (j'avais installé cygwin):

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

Consultez codesaga . Il fait un bon travail de visualisation des commits de contrôle de source. Je ne peux pas garantir la partie rapportée.

Ce programme pourrait vous aider, pas avec des audits, mais des mises à jour

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

  • Surveillez la source de certains événements
  • Recevez des notifications de tout type (bulles de dialogue, icônes de barre des tâches, email, sons, ...) lorsque certains événements se produisent

Pour voir les accès réels à SVN, vous devez analyser les journaux du serveur Apache (en supposant que vous serviez SVN sur Apache).

Cette question est également un peu ancienne, mais j'ai créé un script qui peut être utile pour les rapports / audits simples de Subversion et pour garder une trace des modifications apportées à un référentiel SVN et je voulais le partager. Il extrait les informations sur SVN sont validées de la même manière que la commande " svnlook " mais il a une paire d'avantages. Tout d'abord, cela permet de parcourir toutes les révisions d'un référentiel pour garder une trace de toutes les modifications apportées. Deuxièmement, le les informations sont imprimées dans un format tabulaire séparé par des tabulations (comme dans les commandes Unix telles que ps ou df), lisible par l'homme et facile à analyser ou à importer dans un tableur, ce qui est très utile pour les rapports. Il peut aussi être appelé ou intégré dans un hook post-commit SVN.

Il s’agit d’un script Perl appelé svn-commit-info.pl qui prend trois arguments. Le premier est le chemin du référentiel et c'est obligatoire. Le second, optionnel, est le modèle de fichier à rechercher. Et le troisième, également optionnel, est le numéro de révision à interroger.

S'il est exécuté uniquement avec le chemin du référentiel, il imprime dans STDOUT des informations sur les fichiers affectés par tous les commits faits dans le référentiel. Par exemple, en supposant que le référentiel soit stocké dans / svn / repos / test dans le répertoire Serveur 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            

Les champs séparés par des tabulations sont: l’opération effectuée, le numéro de révision, la date et l’heure, l’auteur de la révision, le taille du fichier en octets (sauf si le fichier est un répertoire marqué par la chaîne " < DIR > ") et le chemin du fichier affecté dans le fichier dépôt. Les trois premières lignes contiennent des commentaires concernant la sortie.

La sortie de la commande précédente peut prendre un certain temps si le référentiel est grand, avec de nombreux fichiers ou révisions. Si vous souhaitez suivre les modifications apportées à un fichier particulier (ou à un ensemble de fichiers), il est préférable de: pour spécifier le modèle de fichier (qui est en fait une expression rationnelle Perl). Par exemple, pour obtenir des informations sur les modifications faite dans le fichier style.css:

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

Si vous êtes intéressé par une révision particulière, vous pouvez spécifier le troisième paramètre. Par exemple pour imprimer toutes les modifications de la troisième révision, en tenant compte de '.' correspond à n'importe quel caractère d'une expression régulière Perl:

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

Et bien sûr, vous pouvez exploiter la puissance des filtres Unix et du traitement en pipeline pour effectuer des requêtes plus complexes, par exemple pour: retrouvez toutes les modifications apportées par l'utilisateur David:

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

Pour trouver tous les fichiers créés avec la taille > = 1Mo:

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

Le script utilise la commande standard Subversion " svnlook " mais sinon, il est autonome. Là Deux fonctions d'assistance permettent de créer la commande et d'obtenir le résultat de & "; svnlook &"; puis fait des appels successifs à la commande pour composer la sortie. Il nécessite Subversion & Gt; = 1.7 et il a été testé sur 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;

J'espère que cela aide et désolé pour le long post.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top