summaryrefslogtreecommitdiff
path: root/build-aux/gitlog-to-changelog
diff options
context:
space:
mode:
authorGary V. Vaughan <gary@gnu.org>2011-11-01 17:58:37 +0700
committerGary V. Vaughan <gary@gnu.org>2011-11-17 12:08:53 +0700
commitf51babfaf400eb509f854cad509f5e649b9182b1 (patch)
tree22a2d6a3e1473c8b8a7b213fa9369db017b24a29 /build-aux/gitlog-to-changelog
parent4f6a7ef5f2097b501ddeac9db94d02306e4546d0 (diff)
downloadgnulib-f51babfaf400eb509f854cad509f5e649b9182b1.tar.gz
gitlog-to-changelog: support multi-author commits.
The FSF cares about keeping track of all authors of patches to its projects, but Git doesn't provide obvious support for multi-author changesets. Consensus seems to be forming around the use of extra Signed-off-by inspired lines in the log message formatted as `Co-authored-by: A U Thor <email@example.com>' for round-tripping multi-author commits between version control systems. * gitlog-to-changelog: Extract `Co-authored-by:' lines from the git log message and output in standard ChangeLog multi-author format. Reported by Peter Rosin <peda@lysator.liu.se>
Diffstat (limited to 'build-aux/gitlog-to-changelog')
-rwxr-xr-xbuild-aux/gitlog-to-changelog27
1 files changed, 23 insertions, 4 deletions
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 56c7e4e3c1..40a8035546 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -200,6 +200,7 @@ sub parse_amend_file($)
. "(Is your Git too old? Version 1.5.1 or later is required.)\n");
my $prev_date_line = '';
+ my @prev_coauthors = ();
while (1)
{
defined (my $in = <PIPE>)
@@ -249,18 +250,36 @@ sub parse_amend_file($)
. "(expected date/author/email):\n$author_line\n";
my $date_line = sprintf "%s $2\n", strftime ("%F", localtime ($1));
- # If this line would be the same as the previous date/name/email
- # line, then arrange not to print it.
- if ($date_line ne $prev_date_line)
+
+ # Format 'Co-authored-by: A U Thor <email@example.com>' lines in
+ # standard multi-author ChangeLog format.
+ my @coauthors = grep /^Co-authored-by:.*$/, @line;
+ for (@coauthors)
+ {
+ s/^Co-authored-by:\s*/\t /;
+ s/\s*</ </;
+
+ /<.*?@.*\..*>/
+ or warn "$ME: warning: missing email address for "
+ . substr ($_, 5) . "\n";
+ }
+
+ # If this header would be the same as the previous date/name/email/
+ # coauthors header, then arrange not to print it.
+ if ($date_line ne $prev_date_line or "@coauthors" ne "@prev_coauthors")
{
$prev_date_line eq ''
or print "\n";
print $date_line;
+ @coauthors
+ and print join ("\n", @coauthors), "\n";
}
$prev_date_line = $date_line;
+ @prev_coauthors = @coauthors;
- # Omit "Signed-off-by..." lines.
+ # Omit "Co-authored-by..." and "Signed-off-by..." lines.
@line = grep !/^Signed-off-by: .*>$/, @line;
+ @line = grep !/^Co-authored-by: /, @line;
# Remove leading and trailing blank lines.
if (@line)