#!/usr/bin/perl
use warnings;
use strict;
use IO::File;
use Data::Dumper;
$|++;
my %comitters;
while (<>) {
next unless /^r(\d+) /;
my ($r, $comitter, $date) = split /[|:]/, $_;
$comitter=trim($comitter);
$comitters{$comitter}++;
}
#foreach (sort {$comitters{$a} <=> $comitters{$b}} keys %comitters) {
# print "$_: $comitters{$_}\n";
#}
my $authors = readauthors();
#print Dumper $authors;
foreach my $c (sort {$comitters{$b} <=> $comitters{$a}} keys %comitters) {
print "$c: $comitters{$c}\n";
my $author;
my $re = qr/$c/i;
foreach my $a (@$authors) {
if ($a->{wholeline} =~ $re) {
$author = $a;
last;
}
}
if (!$author) {
# Time for some hurestics: Try matching _ as space -- Darren_Duncan for example.
my $re = $c;
$re =~ s/_/ /;
$re = qr/$re/i;
foreach my $a (@$authors) {
if ($a->{wholeline} =~ $re) {
$author = $a;
last;
}
}
}
if (!$author) {
# Guess first initial, last name.
my ($initial, $last) = $c =~ m/^(.)(.*)/;
$re = qr/^$initial.*$last/i;
foreach my $a (@$authors) {
if ($a->{wholeline} =~ $re) {
$author = $a;
last;
}
}
}
if (!$author) {
warn "$c missing from AUTHORS file\n";
}
$author->{commitid}=$c;
$author->{commitcount}=$comitters{$c};
print Dumper $author;
}
sub trim {
local $_=shift;
s/^\s+//;
s/\s+$//;
return $_;
}
sub readauthors {
my $fh = IO::File->new("AUTHORS", "<:utf8");
my @authors;
my (%bycpan, %bynick);
while (<$fh>) {
last if /^$/;
}
while (<$fh>) {
chomp;
my ($cpanid) = m/\(([A-Z]+)\)/;
my ($nick) = m/"([^"]+)"/;
my $author = {cpanid => $cpanid, nick => $nick, wholeline => $_};
push @authors, $author;
}
return \@authors;
}