diff options
Diffstat (limited to 'build-aux/gitlog-to-changelog')
-rwxr-xr-x | build-aux/gitlog-to-changelog | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog index 40a8035546..ee1ac87a67 100755 --- a/build-aux/gitlog-to-changelog +++ b/build-aux/gitlog-to-changelog @@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' if 0; # Convert git log output to ChangeLog format. -my $VERSION = '2011-11-02 07:53'; # UTC +my $VERSION = '2011-12-24 18:51'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook @@ -199,6 +199,7 @@ sub parse_amend_file($) or die ("$ME: failed to run `". quoted_cmd (@cmd) ."': $!\n" . "(Is your Git too old? Version 1.5.1 or later is required.)\n"); + my $prev_multi_paragraph; my $prev_date_line = ''; my @prev_coauthors = (); while (1) @@ -248,12 +249,25 @@ sub parse_amend_file($) $author_line =~ /^(\d+) (.*>)$/ or die "$ME:$.: Invalid line " . "(expected date/author/email):\n$author_line\n"; - my $date_line = sprintf "%s $2\n", strftime ("%F", localtime ($1)); + my @coauthors = grep /^Co-authored-by:.*$/, @line; + # 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) + { + while ($line[0] =~ /^\s*$/) { shift @line; } + while ($line[$#line] =~ /^\s*$/) { pop @line; } + } + + # Record whether there are two or more paragraphs. + my $multi_paragraph = grep /^\s*$/, @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 /; @@ -264,9 +278,13 @@ sub parse_amend_file($) . 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") + # If this header would be different from the previous date/name/email/ + # coauthors header, or if this or the previous entry consists of two + # or more paragraphs, then print the header. + if ($date_line ne $prev_date_line + or "@coauthors" ne "@prev_coauthors" + or $multi_paragraph + or $prev_multi_paragraph) { $prev_date_line eq '' or print "\n"; @@ -276,17 +294,7 @@ sub parse_amend_file($) } $prev_date_line = $date_line; @prev_coauthors = @coauthors; - - # 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) - { - while ($line[0] =~ /^\s*$/) { shift @line; } - while ($line[$#line] =~ /^\s*$/) { pop @line; } - } + $prev_multi_paragraph = $multi_paragraph; # If there were any lines if (@line == 0) |