Add contrib/stats/mailmap.pl script
authorJunio C Hamano <gitster@pobox.com>
Sat, 14 Jul 2007 20:43:09 +0000 (13:43 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 14 Jul 2007 20:43:49 +0000 (13:43 -0700)
This script reads the existing commit log and .mailmap file,
and outputs author e-mail addresses that would map to more
than one names (most likely due to difference in the way they
are spelled, but some are due to ancient botched commits).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/stats/mailmap.pl [new file with mode: 0755]

diff --git a/contrib/stats/mailmap.pl b/contrib/stats/mailmap.pl
new file mode 100755 (executable)
index 0000000..4b852e2
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+my %mailmap = ();
+open I, "<", ".mailmap";
+while (<I>) {
+       chomp;
+       next if /^#/;
+       if (my ($author, $mail) = /^(.*?)\s+<(.+)>$/) {
+               $mailmap{$mail} = $author;
+       }
+}
+close I;
+
+my %mail2author = ();
+open I, "git log --pretty='format:%ae  %an' |";
+while (<I>) {
+       chomp;
+       my ($mail, $author) = split(/\t/, $_);
+       next if exists $mailmap{$mail};
+       $mail2author{$mail} ||= {};
+       $mail2author{$mail}{$author} ||= 0;
+       $mail2author{$mail}{$author}++;
+}
+close I;
+
+while (my ($mail, $authorcount) = each %mail2author) {
+       # %$authorcount is ($author => $count);
+       # sort and show the names from the most frequent ones.
+       my @names = (map { $_->[0] }
+               sort { $b->[1] <=> $a->[1] }
+               map { [$_, $authorcount->{$_}] }
+               keys %$authorcount);
+       if (1 < @names) {
+               for (@names) {
+                       print "$_ <$mail>\n";
+               }
+       }
+}
+