Commit | Line | Data |
---|---|---|
2e15741e MW |
1 | #! /usr/bin/perl |
2 | ||
3 | my (%Y, %M); | |
4 | open my $fh, "-|", "git", "log", | |
1875c00a | 5 | "--date=format:%Y", "--pretty=format:%ad %aN", @ARGV |
2e15741e MW |
6 | or die "git log: $!"; |
7 | while (<$fh>) { | |
8 | /(\d+)\s+(.*)$/ or die "wtf? $_"; | |
9 | my ($y, $who) = ($1, $2); | |
10 | push @{$Y{$who}}, $y; | |
11 | if (!exists $M{$who} || $y < $M{$who}) { $M{$who} = $y; } | |
12 | } | |
13 | close $fh or die "git log (rc = $?)"; | |
14 | ||
15 | my ($S, $O, $L); | |
16 | sub out () { | |
17 | defined $L or return; | |
18 | defined $S and $S .= ", "; | |
19 | if ($O < $L - 1) { $S .= "$O--$L" } | |
20 | elsif ($O != $L) { $S .= "$O, $L" } | |
21 | else { $S .= "$L" } | |
22 | } | |
23 | ||
24 | for my $who (sort { $M{$a} <=> $M{$b} } keys %Y) { | |
25 | my @y = sort { $a <=> $b } @{$Y{$who}}; | |
26 | undef $S; undef $L; | |
27 | for my $y (@y) { | |
28 | if (!defined $L) { $O = $L = $y; } | |
29 | elsif ($y == $L + 1) { $L = $y; } | |
30 | elsif ($y != $L) { out(); $O = $L = $y; } | |
31 | } | |
32 | out(); | |
33 | print "$who: $S\n" | |
34 | } |