Old versions of bash (at least version 3.2.51) don't properly handle
prefix stripping together with quoting when evaluating an array. So
strip the prefix before adding each file to opt_files. It's faster
anyway.

Same thing when diffing against a snapshot, strip the snapshot
directory prefix from file names before evaluating the quoted files
array.

This fixes a regression introduced in:

commit b0baeeb6b61132af92fd75df5f912554d295dee1
Author: Jean Delvare <[email protected]>
Date:   Fri Mar 25 18:48:49 2011 +0100

    diff, refresh: Accept file names with spaces

(Only affecting the versions of bash which have the aforementioned bug.)

This also fixes a bug when called from a subdirectory and a file
passed as an argument starts with "./".

Extend the test suite to test both cases, so that such bugs can't
sneak in in the future.
---
 quilt/diff.in    |   10 ++++++----
 test/subdir.test |   17 +++++++++++++++++
 test/three.test  |   16 ++++++++++++++++
 3 files changed, 39 insertions(+), 4 deletions(-)

--- a/quilt/diff.in
+++ b/quilt/diff.in
@@ -219,7 +219,7 @@ done
 
 QUILT_DIFF_OPTS="$QUILT_DIFF_OPTS $opt_format"
 
-opt_files=( $(for file in "$@"; do echo "$SUBDIR$file" ; done) )
+opt_files=( $(for file in "$@"; do echo "$SUBDIR${file#./}" ; done) )
 
 if [ $[0$opt_combine + 0$opt_snapshot + 0$opt_relative] -gt 1 ]
 then
@@ -259,8 +259,10 @@ if [ -n "$opt_snapshot" -a ${#opt_files[
 then
        # Add all files in the snapshot into the file list (they may all
        # have changed).
-       files=( $(find $QUILT_PC/$snap_subdir -type f | sort) )
-       printf "%s\n" "${files[@]#$QUILT_PC/$snap_subdir/}" >&4
+       files=( $(find $QUILT_PC/$snap_subdir -type f \
+                 | sed -e "s/^$(quote_bre $QUILT_PC/$snap_subdir/)//" \
+                 | sort) )
+       printf "%s\n" "${files[@]}" >&4
        unset files
        # Also look at all patches that are currently applied.
        opt_combine=1
@@ -298,7 +300,7 @@ do
        for file in $(files_in_patch_ordered "$patch")
        do
                if [ ${#opt_files[@]} -gt 0 ] && \
-                  ! in_array "$file" "${opt_files[@]#./}"
+                  ! in_array "$file" "${opt_files[@]}"
                then
                        continue
                fi
--- a/test/subdir.test
+++ b/test/subdir.test
@@ -58,5 +58,22 @@
        > @@ -1 +0,0 @@
        > -yet another file
 
+       $ quilt diff --no-index -p ab file file2 no
+       > --- a/subdir/file
+       > +++ b/subdir/file
+       > @@ -1 +1 @@
+       > -old file
+       > +new contents
+       > --- /dev/null
+       > +++ b/subdir/file2
+       > @@ -0,0 +1 @@
+       > +another file
+
+       $ quilt diff --no-index -p ab ./file3 ./no
+       > --- a/subdir/file3
+       > +++ /dev/null
+       > @@ -1 +0,0 @@
+       > -yet another file
+
        $ quilt refresh
        > Refreshed patch %{_P}test.patch
--- a/test/three.test
+++ b/test/three.test
@@ -61,6 +61,22 @@
        $ quilt refresh
        > Refreshed patch %{P}patch2.diff
 
+       $ quilt diff -p0 f g
+       > Index: g
+       > ===================================================================
+       > --- /dev/null
+       > +++ g
+       > @@ -0,0 +1 @@
+       > +g
+
+       $ quilt diff -p0 ./f ./g
+       > Index: g
+       > ===================================================================
+       > --- /dev/null
+       > +++ g
+       > @@ -0,0 +1 @@
+       > +g
+
        $ quilt pop
        > Removing patch patches/patch2.diff
        > Removing g

-- 
Jean Delvare
Suse L3 Support


_______________________________________________
Quilt-dev mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/quilt-dev

Reply via email to