changeset 18022:706f963a786b

gitlog-to-changelog: improve gitmerge.el commits Let the Emacs ChangeLog generation process exclude "skipped" messages from merge commits (Bug#20717). * build-aux/gitlog-to-changelog: Handle gitmerge.el skipped commits.
author Glenn Morris <rgm@gnu.org>
date Sat, 20 Jun 2015 10:09:22 -0700
parents aac9b5fb9783
children 73a45157f553
files ChangeLog build-aux/gitlog-to-changelog
diffstat 2 files changed, 47 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sat Jun 20 09:57:08 2015 -0700
+++ b/ChangeLog	Sat Jun 20 10:09:22 2015 -0700
@@ -1,3 +1,10 @@
+2015-06-20  Glenn Morris  <rgm@gnu.org>
+
+	gitlog-to-changelog: improve gitmerge.el commits
+	Let the Emacs ChangeLog generation process exclude "skipped"
+	messages from merge commits (Bug#20717).
+	* build-aux/gitlog-to-changelog: Handle gitmerge.el skipped commits.
+
 2015-06-20  Paul Eggert  <eggert@cs.ucla.edu>
 
 	wchar: fix MinGW compilation warnings
--- a/build-aux/gitlog-to-changelog	Sat Jun 20 09:57:08 2015 -0700
+++ b/build-aux/gitlog-to-changelog	Sat Jun 20 10:09:22 2015 -0700
@@ -3,7 +3,7 @@
     if 0;
 # Convert git log output to ChangeLog format.
 
-my $VERSION = '2015-05-19 01:37'; # UTC
+my $VERSION = '2015-06-11 01:03'; # 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
@@ -270,6 +270,7 @@
   my $prev_multi_paragraph;
   my $prev_date_line = '';
   my @prev_coauthors = ();
+  my @skipshas = ();
   while (1)
     {
       defined (my $in = <PIPE>)
@@ -290,6 +291,21 @@
       $sha =~ /^[0-9a-fA-F]{40}$/
         or die "$ME:$.: invalid SHA1: $sha\n";
 
+      my $skipflag = 0;
+      if (@skipshas)
+        {
+          foreach(@skipshas)
+            {
+              if ($sha =~ /^$_/)
+                {
+                  $skipflag = 1;
+                  ## Perhaps only warn if a pattern matches more than once?
+                  warn "$ME: warning: skipping $sha due to $_\n";
+                  last;
+                }
+            }
+        }
+
       # If this commit's log requires any transformation, do it now.
       my $code = $amend_code->{$sha};
       if (defined $code)
@@ -348,9 +364,30 @@
           while ($line[$#line] =~ /^\s*$/) { pop @line; }
         }
 
+      # Handle Emacs gitmerge.el "skipped" commits.
+      # Yes, this should be controlled by an option.  So sue me.
+      if ( grep /^(; )?Merge from /, @line )
+      {
+          my $found = 0;
+          foreach (@line)
+          {
+              if (grep /^The following commit.*skipped:$/, $_)
+              {
+                  $found = 1;
+                  ## Reset at each merge to reduce chance of false matches.
+                  @skipshas = ();
+                  next;
+              }
+              if ($found && $_ =~ /^([0-9a-fA-F]{7,}) [^ ]/)
+              {
+                  push ( @skipshas, $1 );
+              }
+          }
+      }
+
       # Ignore commits that match the --ignore-matching pattern, if specified.
-      if (! (defined $ignore_matching
-             && @line && $line[0] =~ /$ignore_matching/))
+      if (! ($skipflag || (defined $ignore_matching
+             && @line && $line[0] =~ /$ignore_matching/)))
         {
           if (defined $ignore_line && @line)
             {