]> Savannah Git Hosting - gnulib.git/commitdiff
gitlog-to-changelog: do not clump multi-paragraph entries
authorJim Meyering <meyering@redhat.com>
Sun, 25 Dec 2011 15:14:36 +0000 (16:14 +0100)
committerJim Meyering <meyering@redhat.com>
Mon, 26 Dec 2011 09:19:53 +0000 (10:19 +0100)
Identical header lines (date,name,email+coauthors) are suppressed,
thus putting all entries with those same characteristics under
a single header.  However, when a log entry consists of two or
more paragraphs, it may not be clear where it starts and ends.
This change makes it so that such an entry is always separated
from others by a header line, even when that header would
otherwise be suppressed.
* build-aux/gitlog-to-changelog: Implement the above.
Inspired by a related request from Stefano Lattarini in
http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/29456

ChangeLog
build-aux/gitlog-to-changelog

index 7ce1968b0176db5733730e9be6b2ba42bc6fd52a..cc50b4add6e3a1479b5fa7e5aae65317617760a6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2011-12-25  Jim Meyering  <meyering@redhat.com>
+
+       gitlog-to-changelog: do not clump multi-paragraph entries
+       Identical header lines (date,name,email+coauthors) are suppressed,
+       thus putting all entries with those same characteristics under
+       a single header.  However, when a log entry consists of two or
+       more paragraphs, it may not be clear where it starts and ends.
+       This change makes it so that such an entry is always separated
+       from others by a header line, even when that header would
+       otherwise be suppressed.
+       * build-aux/gitlog-to-changelog: Implement the above.
+       Inspired by a related request from Stefano Lattarini in
+       http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/29456
+
 2011-12-25  Paul Eggert  <eggert@cs.ucla.edu>
 
        announce-gen: fix `cmd' typo in diagnostic
index 40a80355460917d52a19a235660da9b9656feffe..ee1ac87a67007db6913be9337e4da33a01f74a9c 100755 (executable)
@@ -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)