Meta/add-by: support --mine=<sig> to keep the trailer at the end
Junio C Hamano committed
Sep 9, 2022 at 15:11 UTC
ddb098fc287671a8329e9a4cd559c2cde43ceb1f
1 file changed
+36
-15
add-by
+36
-15
index 4e7983e3a2..650abf1937 100755
--- a/add-by
+++ b/add-by
@@ -46,22 +46,32 @@ sub accumulate {
push @more, [@_];
}
+my $mine;
+
+sub compute_bylines {
+ my %names = map { $_->[1] => 1 } @more;
+ my %map = ();
+ my @append;
+ find_author(\%map, keys (%names));
+ for (@more) {
+ my ($tag, $name) = @$_;
+ if ($tag eq 'mine') {
+ $mine = $map{$name};
+ next;
+ }
+ $tag = ucfirst($tag);
+ push @append, "$tag: $map{$name}";
+ }
+ if (@append) {
+ $append = join("\n", @append) . "\n";
+ } else {
+ $append = "";
+ }
+}
+
sub add_more_bylines {
if (!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 = "";
- }
+ compute_bylines();
}
print $append;
}
@@ -74,25 +84,36 @@ exit 1 unless (GetOptions("signed-off-by=s" => \&accumulate,
"tested-by=s" => \&accumulate,
"helped-by=s" => \&accumulate,
"check-only!" => \$check_only,
+ "mine=s" => \&accumulate,
"debug!" => \$debug,
));
+compute_bylines();
+
if ($check_only) {
add_more_bylines();
exit 0;
}
+my $seen_mine = 0;
while (<>) {
if ($state == parsing) {
if (/^[-A-Za-z]+-by: /i || /^Cc: /i) {
$state = waiting;
}
} elsif ($state == waiting) {
- if (/^[-A-Za-z]+-by: /i || /^Cc: /i) {
+ if (defined $mine && /^Signed-off-by: \Q$mine\E/) {
+ $seen_mine = 1;
+ next;
+ } elsif (/^[-A-Za-z]+-by: /i || /^Cc: /i) {
$state = waiting;
} else {
add_more_bylines();
+ if ($seen_mine) {
+ print "Signed-off-by: $mine\n";
+ }
$state = parsing;
+ $seen_mine = 0;
}
}
print;