Werner Koch wrote:
> On Sun, 12 Feb 2012 22:48, j...@meyering.net said:
>
>> Hard-coding "--"...

My point was that we may not want to hard-code "--".
What if someone includes email with a "--" line followed by a signature?

...
> Okay.  Here comes the fixed patch:
>
>
>>From 816b5f0f0928e257f7a4d78205be2a1935a58660 Mon Sep 17 00:00:00 2001
> From: Werner Koch <w...@g10code.com>
> Date: Mon, 30 Jan 2012 19:10:21 +0100
> Subject: [PATCH] gitlog-to-changelog: add option --tear-off.
>
> This option allows to have blurbs in a commit messages, which shall
> not be copied to the ChangeLog.  It can also be used to suppress an
> entire log entry.
> * build-aux/gitlog-to-changelog: New option --tear-off.
> ---
>  build-aux/gitlog-to-changelog |   24 +++++++++++++++++++++++-
>  1 files changed, 23 insertions(+), 1 deletions(-)
>
> diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
> index 38c6f3a..070c9c7 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 = '2012-01-18 07:50'; # UTC
> +my $VERSION = '2012-02-16 09:53'; # 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
> @@ -68,6 +68,8 @@ OPTIONS:
>                    header; the default is to cluster adjacent commit messages
>                    if their headers are the same and neither commit message
>                    contains multiple paragraphs.
> +   --tear-off   tear off all commit log lines after a '--' line and
> +                  skip log entries with the first body line being '--'.
>     --since=DATE convert only the logs since DATE;
>                    the default is to convert all log entries.
>     --format=FMT set format string for commit subject and body;
> @@ -195,6 +197,7 @@ sub parse_amend_file($)
>    my $amend_file;
>    my $append_dot = 0;
>    my $cluster = 1;
> +  my $tear_off = 0;
>    GetOptions
>      (
>       help => sub { usage 0 },
> @@ -204,6 +207,7 @@ sub parse_amend_file($)
>       'amend=s' => \$amend_file,
>       'append-dot' => \$append_dot,
>       'cluster!' => \$cluster,
> +     'tear-off' => \$tear_off,
>      ) or usage 1;
>
>
> @@ -236,6 +240,10 @@ sub parse_amend_file($)
>        $n_read == $log_nbytes
>          or die "$ME:$.: unexpected EOF\n";
>
> +      # Skip log entries if the body starts with a tear off marker.
> +      $tear_off && $log =~ /^.*\n\n.*\n--\s*\n/
> +        and goto SKIPCOMMIT;
> +
>        # Extract leading hash.
>        my ($sha, $rest) = split ':', $log, 2;
>        defined $sha
> @@ -286,6 +294,19 @@ sub parse_amend_file($)
>                         |Copyright-paperwork-exempt:[ ]
>                         )/x, @line;
>
> +      # Remove everything after a line with 2 dashes at the beginning.
> +      if ($tear_off)
> +        {
> +           my @tmpline;
> +           foreach (@line)
> +             {
> +               /^--\s*$/
> +                 and last;
> +               push @tmpline, $_;
> +             }
> +           @line = @tmpline;
> +        }

Hi Werner,

Is the first test-and-goto hunk required?
If so, doesn't it belong *after* the block that can transform
a commit log?

I would have thought that your latter hunk would be enough.
I.e., I propose the following adjustment to your change:
(also moving --tear-off down to where it'd go if all options
were alphabetized and adjusting its wording, and moving another comment)
I'd also add an entry in the ChangeLog file.


diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index 070c9c7..a73decb 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -68,13 +68,13 @@ OPTIONS:
                   header; the default is to cluster adjacent commit messages
                   if their headers are the same and neither commit message
                   contains multiple paragraphs.
-   --tear-off   tear off all commit log lines after a '--' line and
-                  skip log entries with the first body line being '--'.
    --since=DATE convert only the logs since DATE;
                   the default is to convert all log entries.
    --format=FMT set format string for commit subject and body;
                   see 'man git-log' for the list of format metacharacters;
                   the default is '%s%n%b%n'
+   --tear-off   if a commit log body line matches /^--\s*$/, elide that
+                  line and all following lines.

    --help       display this help and exit
    --version    output version information and exit
@@ -240,10 +240,6 @@ sub parse_amend_file($)
       $n_read == $log_nbytes
         or die "$ME:$.: unexpected EOF\n";

-      # Skip log entries if the body starts with a tear off marker.
-      $tear_off && $log =~ /^.*\n\n.*\n--\s*\n/
-        and goto SKIPCOMMIT;
-
       # Extract leading hash.
       my ($sha, $rest) = split ':', $log, 2;
       defined $sha
@@ -294,9 +290,9 @@ sub parse_amend_file($)
                        |Copyright-paperwork-exempt:[ ]
                        )/x, @line;

-      # Remove everything after a line with 2 dashes at the beginning.
       if ($tear_off)
         {
+          # If a line matches /^--\s*$/, elide it and all following lines.
            my @tmpline;
            foreach (@line)
              {
@@ -374,7 +370,6 @@ sub parse_amend_file($)
           print "\n", join ("\n", @line), "\n";
         }

-    SKIPCOMMIT:
       defined ($in = <PIPE>)
         or last;
       $in ne "\n"

Reply via email to