/[tokyocabinet-toys]/svn-tsv.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /svn-tsv.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9 - (hide annotations)
Sat Jul 25 16:50:09 2009 UTC (14 years, 9 months ago) by dpavlin
File MIME type: text/plain
File size: 1786 byte(s)
create Tokyo Cabinet tab separated file with column names
or just with data

1 dpavlin 7 #!/usr/bin/perl -w
2    
3     # Produce nice statistics from SubVersion repository
4    
5     use strict;
6     use XML::Simple;
7    
8     my $repo = shift @ARGV || die "usage: $0 /path/to/svn/repository\n";
9    
10     $repo = "file://$repo" if -e $repo;
11    
12     my $debug = 0;
13 dpavlin 9 my $tsv = 0;
14 dpavlin 7
15     my $from_rev = 1;
16     my $to_rev = 'HEAD';
17    
18     my %add;
19     my %del;
20     my %lin;
21    
22     # print headline
23    
24     print STDERR "reading log\n" if $debug;
25    
26     open(LOG, "svn log -v --xml -r $from_rev:$to_rev $repo |") || die "svn log: $!";
27     my $log;
28     while(<LOG>) {
29     $log .= $_;
30     }
31     close(LOG);
32    
33     my $fmt = "\n" . "-" x 79 . "\nr%5s| %8s | %s\n\n%s\n";
34    
35     my $xml = XMLin($log, ForceArray => [ 'logentry', 'path' ]);
36     foreach my $e (@{$xml->{'logentry'}}) {
37     my $rev = $e->{'revision'};
38     my $date = $e->{'date'};
39     $date =~ s/T/ /;
40     $date =~ s/\..*$//;
41     # $date =~ s/(\d\d\d\d)-(\d\d)-(\d\d)/$2\/$3\/$1/ || die "can't parse date: $date";
42    
43     printf STDERR ($fmt, $e->{'revision'}, $e->{'author'}, $e->{'date'}, $e->{'msg'}) if $debug;
44     foreach my $p (@{$e->{'paths'}->{'path'}}) {
45     my ($action,$path) = ($p->{'action'},$p->{'content'});
46    
47     print STDERR "$action: $path\n" if $debug;
48     }
49    
50     my $msg = $e->{'msg'};
51     $msg =~ s{\s+}{ }gs;
52    
53     # cound added/deleted lines for this revision
54    
55     open(DIFF, "svn diff -r".($rev-1).":$rev $repo |") || die "svn diff: $!";
56    
57     my ($add,$del) = (0,0);
58    
59     my $skip = 1;
60     my $files = 0;
61     my $path;
62    
63     while(<DIFF>) {
64     chomp;
65     print STDERR "DIFF $_\n" if $debug;
66     if (/^Index:\s+(\S+)/) {
67     $path = $2;
68     $files++;
69     } elsif (/^(\+|-|\s)/) {
70     if ("$1" eq "+") {
71     $add++;
72     } elsif ("$1" eq "-") {
73     $del--;
74     }
75     }
76     }
77     close(DIFF);
78    
79 dpavlin 9 if ( $tsv ) {
80     print $repo, '@', $rev,
81     "\trepo\t$repo\trev\t$rev\tdate\t$date\tfiles\t$files\tadd\t$add\tdel\t$del\tmessage\t$msg\n";
82     } else {
83     print "$repo\t$rev\t$date\t$files\t$add\t$del\t$msg\n";
84     }
85 dpavlin 7
86     }

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26