提交 8cbb3a77 编写于 作者: J Joe Perches 提交者: Linus Torvalds

scripts/get_maintainer.pl: add .mailmap use, shell and email cleanups

Add reading and using .mailmap file if it exists
Convert address entries in .mailmap to first encountered address
Don't terminate shell commands with \n
Strip characters found after sign-offs by: name <address> [stripped]
Signed-off-by: NJoe Perches <joe@perches.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 0e70e83d
...@@ -152,6 +152,36 @@ while (<MAINT>) { ...@@ -152,6 +152,36 @@ while (<MAINT>) {
} }
close(MAINT); close(MAINT);
my %mailmap;
open(MAILMAP, "<${lk_path}.mailmap") || warn "$P: Can't open .mailmap\n";
while (<MAILMAP>) {
my $line = $_;
next if ($line =~ m/^\s*#/);
next if ($line =~ m/^\s*$/);
my ($name, $address) = parse_email($line);
$line = format_email($name, $address);
next if ($line =~ m/^\s*$/);
if (exists($mailmap{$name})) {
my $obj = $mailmap{$name};
push(@$obj, $address);
} else {
my @arr = ($address);
$mailmap{$name} = \@arr;
}
}
close(MAILMAP);
foreach my $name (sort {$mailmap{$a} <=> $mailmap{$b}} keys %mailmap) {
my $obj = $mailmap{$name};
foreach my $address (@$obj) {
}
}
## use the filenames on the command line or find the filenames in the patchfiles ## use the filenames on the command line or find the filenames in the patchfiles
my @files = (); my @files = ();
...@@ -403,12 +433,12 @@ sub parse_email { ...@@ -403,12 +433,12 @@ sub parse_email {
my $name = ""; my $name = "";
my $address = ""; my $address = "";
if ($formatted_email =~ /^([^<]+)<(.*\@.*)>$/) { if ($formatted_email =~ /^([^<]+)<(.*\@.*)>.*$/) {
$name = $1; $name = $1;
$address = $2; $address = $2;
} elsif ($formatted_email =~ /^<(.*\@.*)>$/) { } elsif ($formatted_email =~ /^\s*<(.*\@.*)>.*$/) {
$address = $1; $address = $1;
} elsif ($formatted_email =~ /^(.*\@.*)$/) { } elsif ($formatted_email =~ /^\s*(.*\@.*)$/) {
$address = $1; $address = $1;
} }
...@@ -557,6 +587,29 @@ sub which { ...@@ -557,6 +587,29 @@ sub which {
return ""; return "";
} }
sub mailmap {
my @lines = @_;
my %hash;
foreach my $line (@lines) {
my ($name, $address) = parse_email($line);
if (!exists($hash{$name})) {
$hash{$name} = $address;
}
if (exists($mailmap{$name})) {
my $obj = $mailmap{$name};
foreach my $map_address (@$obj) {
if (($map_address eq $address) &&
($map_address ne $hash{$name})) {
$line = format_email($name, $hash{$name});
}
}
}
}
return @lines;
}
sub recent_git_signoffs { sub recent_git_signoffs {
my ($file) = @_; my ($file) = @_;
...@@ -592,9 +645,10 @@ sub recent_git_signoffs { ...@@ -592,9 +645,10 @@ sub recent_git_signoffs {
# cut -f2- -d":" # cut -f2- -d":"
s/.*:\s*(.+)\s*/$1/ for (@lines); s/.*:\s*(.+)\s*/$1/ for (@lines);
$total_sign_offs = @lines;
@lines = mailmap(@lines); @lines = mailmap(@lines);
$total_sign_offs = @lines;
@lines = sort(@lines); @lines = sort(@lines);
# uniq -c # uniq -c
foreach my $line (@lines) { foreach my $line (@lines) {
...@@ -655,12 +709,12 @@ sub git_assign_blame { ...@@ -655,12 +709,12 @@ sub git_assign_blame {
my $diff_start = $2; my $diff_start = $2;
my $diff_length = $3; my $diff_length = $3;
next if (!("$file" eq "$diff_file")); next if (!("$file" eq "$diff_file"));
$cmd = "git blame -l -L $diff_start,+$diff_length $file\n"; $cmd = "git blame -l -L $diff_start,+$diff_length $file";
@commits = save_commits($cmd, @commits); @commits = save_commits($cmd, @commits);
} }
} else { } else {
if (-f $file) { if (-f $file) {
$cmd = "git blame -l $file\n"; $cmd = "git blame -l $file";
@commits = save_commits($cmd, @commits); @commits = save_commits($cmd, @commits);
} }
} }
...@@ -678,11 +732,15 @@ sub git_assign_blame { ...@@ -678,11 +732,15 @@ sub git_assign_blame {
if (!$email_git_penguin_chiefs) { if (!$email_git_penguin_chiefs) {
@lines = grep(!/${penguin_chiefs}/i, @lines); @lines = grep(!/${penguin_chiefs}/i, @lines);
} }
# cut -f2- -d":" # cut -f2- -d":"
s/.*:\s*(.+)\s*/$1/ for (@lines); s/.*:\s*(.+)\s*/$1/ for (@lines);
$hash{$_}++ for @lines;
$total_sign_offs += @lines; $total_sign_offs += @lines;
@lines = mailmap(@lines);
$hash{$_}++ for @lines;
} }
$count = 0; $count = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册