The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/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;
}