summaryrefslogtreecommitdiff
path: root/build-aux/gitlog-to-changelog
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2015-06-20 10:09:22 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2015-06-20 10:09:55 -0700
commita6aa0b6f74864a94e940b310f6200e18f7d9dcc9 (patch)
tree1f3fdf6944e2ec80ff82e49561475244839b994b /build-aux/gitlog-to-changelog
parente1085f202f0937aa2875d3135d1babdf07812706 (diff)
downloadgnulib-a6aa0b6f74864a94e940b310f6200e18f7d9dcc9.tar.gz
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.
Diffstat (limited to 'build-aux/gitlog-to-changelog')
-rwxr-xr-xbuild-aux/gitlog-to-changelog43
1 files changed, 40 insertions, 3 deletions
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 9abb693dab..0cab1bf17c 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 = '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 @@ sub git_dir_option($)
my $prev_multi_paragraph;
my $prev_date_line = '';
my @prev_coauthors = ();
+ my @skipshas = ();
while (1)
{
defined (my $in = <PIPE>)
@@ -290,6 +291,21 @@ sub git_dir_option($)
$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 @@ sub git_dir_option($)
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)
{