From f51babfaf400eb509f854cad509f5e649b9182b1 Mon Sep 17 00:00:00 2001 From: "Gary V. Vaughan" Date: Tue, 1 Nov 2011 17:58:37 +0700 Subject: [PATCH] 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 ' 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 --- ChangeLog | 13 +++++++++++++ build-aux/gitlog-to-changelog | 27 +++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index eddc69151..49ae5cac2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2011-11-01 Gary V. Vaughan + + 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 ' 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 + 2011-11-15 Ben Walton (tiny change) Bruno Haible diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog index 56c7e4e3c..40a803554 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 = ) @@ -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 ' 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) -- 2.11.0