You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
1.7 KiB
96 lines
1.7 KiB
![]()
14 years ago
|
#!/usr/bin/perl
|
||
|
|
||
|
use warnings;
|
||
|
use strict;
|
||
|
use Getopt::Long;
|
||
|
|
||
|
my $byline = undef;
|
||
|
my @more;
|
||
|
my $append;
|
||
|
my $debug;
|
||
|
|
||
|
sub find_author {
|
||
|
my $map = shift;
|
||
|
for my $name (@_) {
|
||
|
my $fh;
|
||
|
print STDERR "Checking <$name>..."
|
||
|
if ($debug);
|
||
|
if (!open($fh, "-|",
|
||
|
qw(git log -1 --no-merges),
|
||
|
'--format=%an <%ae>',
|
||
|
"--author=$name",
|
||
|
"--all")) {
|
||
|
print STDERR "opening pipe to read from git log failed\n"
|
||
|
if ($debug);
|
||
|
$map->{$name} = $name;
|
||
|
next;
|
||
|
}
|
||
|
my $line = <$fh>;
|
||
|
if ($line) {
|
||
|
chomp $line;
|
||
|
print STDERR "read <$line> from git log\n"
|
||
|
if ($debug);
|
||
|
$map->{$name} = $line;
|
||
|
} else {
|
||
|
print STDERR "read false ($line) from git log\n"
|
||
|
if ($debug);
|
||
|
$map->{$name} = $name;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sub accumulate {
|
||
|
push @more, [@_];
|
||
|
}
|
||
|
|
||
|
sub add_more_bylines {
|
||
|
if (@more && !defined $append) {
|
||
|
my %names = map { $_->[1] => 1 } @more;
|
||
|
my %map = ();
|
||
|
my @append;
|
||
|
find_author(\%map, keys (%names));
|
||
|
for (@more) {
|
||
|
my ($tag, $name) = @$_;
|
||
|
$tag = ucfirst($tag);
|
||
|
push @append, "$tag: $map{$name}";
|
||
|
}
|
||
|
if (@append) {
|
||
|
$append = join("\n", @append) . "\n";
|
||
|
} else {
|
||
|
$append = "";
|
||
|
}
|
||
|
}
|
||
|
print $append;
|
||
|
}
|
||
|
|
||
|
my $check_only;
|
||
|
|
||
|
exit 1 unless (GetOptions("signed-off-by=s" => \&accumulate,
|
||
|
"acked-by=s" => \&accumulate,
|
||
|
"reviewed-by=s" => \&accumulate,
|
||
|
"tested-by=s" => \&accumulate,
|
||
|
"helped-by=s" => \&accumulate,
|
||
|
"check-only!" => \$check_only,
|
||
|
"debug!" => \$debug,
|
||
|
));
|
||
|
|
||
|
if ($check_only) {
|
||
|
add_more_bylines();
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
while (<>) {
|
||
|
if (/^[-A-Za-z]+-by: /) {
|
||
|
$byline = 1;
|
||
|
} elsif ($byline) {
|
||
|
add_more_bylines();
|
||
|
$byline = undef;
|
||
|
} else {
|
||
|
$byline = undef;
|
||
|
}
|
||
|
print;
|
||
|
}
|
||
|
if ($byline) {
|
||
|
add_more_bylines();
|
||
|
}
|