quilt-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Quilt-dev] [PATCH] `quilt header -a' corrupts diffstat-carrying headers


From: Don Mullis
Subject: [Quilt-dev] [PATCH] `quilt header -a' corrupts diffstat-carrying headers
Date: Wed, 13 Jan 2010 20:54:31 -0800
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

The sequence
    quilt refresh --diffstat
    echo "Appended line" | quilt header -a
puts the appended line _after_ the diffstat, contrary to expectation.

Instead, strip out the diffstat info (as is done already for "-r"),
and append stdin to what remains of the header.
---
 quilt/header.in           |    9 ++++++++-
 quilt/scripts/patchfns.in |   17 +++++++++++++++++
 test/header.test          |   36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+), 1 deletion(-)

Index: quilt/quilt/header.in
===================================================================
--- quilt.orig/quilt/header.in  2010-01-13 20:07:00.000000000 -0800
+++ quilt/quilt/header.in       2010-01-13 20:13:53.000000000 -0800
@@ -139,7 +139,14 @@ else
        tmp2=$(gen_tempfile) || exit 1
        add_exit_handler "rm -f $tmp $tmp2"
 
-       (       if [ -z "$opt_replace" ]
+       (       if [ -n "$opt_append" ]
+               then
+                       # diffstat lines are always at the end of the
+                       # comment section proper, and are preceded by
+                       # a "---" line and followed by a blank line.
+                       cat_file $patch_file_or_null | patch_header \
+                               | strip_diffstat_and_padding
+               elif [ -n "$opt_edit" ]
                then
                        cat_file $patch_file_or_null | patch_header
                fi
Index: quilt/test/header.test
===================================================================
--- quilt.orig/test/header.test 2010-01-13 20:07:00.000000000 -0800
+++ quilt/test/header.test      2010-01-13 20:29:27.000000000 -0800
@@ -45,5 +45,41 @@
        > -foo
        > +bar
 
+       $ quilt refresh --diffstat
+       > Refreshed patch %{P}patch
+
+       $ quilt header -r
+       < Header2
+       > Replaced header of patch patches/patch
+       $ head -n 2  %{P}patch
+       > Header2
+       > Index: d/foo
+
+       $ quilt refresh --diffstat
+       > Refreshed patch %{P}patch
+
+       $ quilt header -a
+       < Appended
+       > Appended text to header of patch patches/patch
+
+       $ quilt header
+       > Header2
+       > Appended
+       $ head -n 3 %{P}patch
+       > Header2
+       > Appended
+       > Index: d/foo
+
+       $ cat patches/patch
+       > Header2
+       > Appended
+       > Index: d/foo
+       > ===================================================================
+       > --- d.orig/foo
+       > +++ d/foo
+       > @@ -1 +1 @@
+       > -foo
+       > +bar
+
        $ cd ..
        $ rm -rf d
Index: quilt/quilt/scripts/patchfns.in
===================================================================
--- quilt.orig/quilt/scripts/patchfns.in        2010-01-13 20:07:00.000000000 
-0800
+++ quilt/quilt/scripts/patchfns.in     2010-01-13 20:13:53.000000000 -0800
@@ -852,6 +852,23 @@ strip_diffstat()
        '
 }
 
+strip_diffstat_and_padding()
+{
+       # 'eat' stores lines that match the first pattern but may not
+       # be part of a diffstat.
+       awk '
+       /#? .* \| / || /^---$/ \
+               { eat = eat $0 "\n"
+                 next }
+       /^#? .* files? changed(, .* insertions?\(\+\))?(, .* deletions?\(-\))?/ 
\
+               { eat = ""
+                 getline
+                 next }
+               { print eat $0
+                 eat = "" }
+       '
+}
+
 in_array()
 {
        local a=$1





reply via email to

[Prev in Thread] Current Thread [Next in Thread]