get_maintainers.pl: improve .mailmap parsing
authorJoe Perches <joe@perches.com>
Tue, 26 Jul 2011 00:13:13 +0000 (17:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 26 Jul 2011 03:57:15 +0000 (20:57 -0700)
Entries that used formats other than "Proper Name <commit@email.xx>"
were not parsed properly.

Try to improve the parsing so that the entries in the forms of:
    Proper Name <proper@email.xx> <commit@email.xx>
and
    Proper Name <proper@email.xx> Commit Name <commit@email.xx>
are transformed correctly.

Signed-off-by: Joe Perches <joe@perches.com>
Reviewed-by: Florian Mickler <florian@mickler.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
scripts/get_maintainer.pl

index d29a8d75cb22ebb37f747f1b0b46d5df24974e58..eb2f1e64edf79b63069fc53399ce71d759ae8795 100755 (executable)
@@ -328,7 +328,8 @@ sub read_mailmap {
        # name1 <mail1> <mail2>
        # name1 <mail1> name2 <mail2>
        # (see man git-shortlog)
-       if (/^(.+)<(.+)>$/) {
+
+       if (/^([^<]+)<([^>]+)>$/) {
            my $real_name = $1;
            my $address = $2;
 
@@ -336,13 +337,13 @@ sub read_mailmap {
            ($real_name, $address) = parse_email("$real_name <$address>");
            $mailmap->{names}->{$address} = $real_name;
 
-       } elsif (/^<([^\s]+)>\s*<([^\s]+)>$/) {
+       } elsif (/^<([^>]+)>\s*<([^>]+)>$/) {
            my $real_address = $1;
            my $wrong_address = $2;
 
            $mailmap->{addresses}->{$wrong_address} = $real_address;
 
-       } elsif (/^(.+)<([^\s]+)>\s*<([^\s]+)>$/) {
+       } elsif (/^(.+)<([^>]+)>\s*<([^>]+)>$/) {
            my $real_name = $1;
            my $real_address = $2;
            my $wrong_address = $3;
@@ -353,7 +354,7 @@ sub read_mailmap {
            $mailmap->{names}->{$wrong_address} = $real_name;
            $mailmap->{addresses}->{$wrong_address} = $real_address;
 
-       } elsif (/^(.+)<([^\s]+)>\s*([^\s].*)<([^\s]+)>$/) {
+       } elsif (/^(.+)<([^>]+)>\s*(.+)\s*<([^>]+)>$/) {
            my $real_name = $1;
            my $real_address = $2;
            my $wrong_name = $3;