#!/usr/bin/perl -w
#
# Use: revcount.pl <changes
$lines = $cnt = 0;
$change_groups = $changes = $bsingles = $singles = 0;
$last_blines = $last_noblines = 0;
%types = ();
while (<>) {
if (/^#/) {
$change_groups++;
$changes += keys %types;
$bsingles++ if $lines - $last_blines == 1;
$last_blines = $lines;
$singles++ if $cnt - $last_noblines == 1;
$last_noblines = $cnt;
%types = ();
next;
}
$lines++;
@a = split /\001/;
$a[0] =~ s|(.*)/.*|$1|;
if ($a[3] eq 'dead') {
$types{del} = 1, $cnt++, $cnt{$a[4]}++,
$files{$a[4]}{$a[0]} = 1 unless $a[6] eq '-';
} else {
$types{add} = 1, $cnt++, $cnt{$a[4]}++,
$files{$a[4]}{$a[0]} = 1 unless $a[5] =~ /^-:/;
$a[5] =~ s/^-://;
if ($a[5] ne '-') {
$types{branch} = 1;
for my $line (split /:/, $a[5]) {
$cnt++;
$cnt{$line}++;
$files{$line}{$a[0]} = 1;
}
}
}
}
$changes += keys %types;
$singles++ if $cnt - $last_noblines == 1;
$bsingles++ if $lines - $last_blines == 1;
print "revs: $cnt\n";
print "change groups: $change_groups\n";
print "changes: $changes\n";
print "single file changes: $bsingles ($singles w/o branches)\n";
print "\nrevs/files per branch:\n";
for my $line (sort { $cnt{$b} <=> $cnt{$a} } keys %cnt) {
print "$line: $cnt{$line}/", scalar(keys %{$files{$line}}), "\n";
}