This is a continuation of Yasushi SHOJI's initial work fixing support
for file name with spaces. This time I fixed support in the diff and
refresh commands, two commands which are frequently used. As before,
no guarantee is made that all options are covered.

Signed-off-by: Jean Delvare <[email protected]>
Cc: Yasushi SHOJI <[email protected]>
---
 quilt/diff.in                |   20 +++++++++++++-------
 quilt/refresh.in             |   14 ++++++++++----
 test/space-in-filenames.test |   22 ++++++++++++++++++++++
 3 files changed, 45 insertions(+), 11 deletions(-)

--- a/test/space-in-filenames.test
+++ b/test/space-in-filenames.test
@@ -10,6 +10,7 @@ $ quilt add foo
 $ quilt files
 > foo
 
+$ echo foo > "foo bar"
 $ quilt add "foo bar"
 > File foo bar added to patch patches/test.diff
 
@@ -17,6 +18,27 @@ $ quilt files
 > foo
 > foo bar
 
+$ echo bar > "foo bar"
+$ quilt diff -p ab
+> Index: b/foo bar
+> ===================================================================
+> --- a/foo bar
+> +++ b/foo bar
+> @@ -1 +1 @@
+> -foo
+> +bar
+
+$ quilt refresh -p ab
+> Refreshed patch patches/test.diff
+$ cat patches/test.diff
+> Index: b/foo bar
+> ===================================================================
+> --- a/foo bar
+> +++ b/foo bar
+> @@ -1 +1 @@
+> -foo
+> +bar
+
 $ quilt add "a: b [c]"
 > File a: b [c] added to patch patches/test.diff
 
--- a/quilt/diff.in
+++ b/quilt/diff.in
@@ -110,15 +110,15 @@ do_diff()
        then
                [ -s "$old_file" ] || old_file=/dev/null
                [ -s "$new_file" ] || new_file=/dev/null
-               if ! diff -q $old_file $new_file >/dev/null
+               if ! diff -q "$old_file" "$new_file" >/dev/null
                then
                        export LANG=$ORIGINAL_LANG
-                       $opt_diff $old_file $new_file
+                       $opt_diff "$old_file" "$new_file"
                        export LANG=POSIX
                        true
                fi
        else
-               diff_file $file $old_file $new_file | colorize
+               diff_file "$file" "$old_file" "$new_file" | colorize
        fi
 }
 
@@ -281,6 +281,10 @@ else
        patches=( $last_patch )
 fi
 
+# Properly handle spaces in file names
+saved_IFS=$IFS
+IFS=$'\n'
+
 for patch in ${patches[@]}
 do
        for file in $(files_in_patch_ordered $patch)
@@ -310,6 +314,8 @@ else
        files=( $(sort -u $tmp_files) )
 fi
 
+IFS=$saved_IFS
+
 if [ -n "$opt_relative" ]
 then
        workdir=$(gen_tempfile -d $PWD/quilt)
@@ -328,22 +334,22 @@ do
        then
                old_file="$workdir/$file"
        else
-               patch="$(first_modified_by $file ${patches[@]})"
+               patch="$(first_modified_by "$file" ${patches[@]})"
                if [ -z "$patch" ]
                then
                        [ -z "$opt_snapshot" ] \
                        && printf $"File %s is not being modified\n" "$file" >&2
                        continue
                fi
-               old_file="$(backup_file_name $patch $file)"
+               old_file="$(backup_file_name $patch "$file")"
        fi
 
-       next_patch=$(next_patch_for_file $last_patch $file)
+       next_patch=$(next_patch_for_file $last_patch "$file")
        if [ -z "$next_patch" ]
        then
                new_file="$file"
        else
-               new_file="$(backup_file_name $next_patch $file)"
+               new_file="$(backup_file_name $next_patch "$file")"
                files_were_shadowed=1
        fi
 
--- a/quilt/refresh.in
+++ b/quilt/refresh.in
@@ -153,6 +153,10 @@ QUILT_DIFF_OPTS="$QUILT_DIFF_OPTS $opt_f
 
 patch=$(find_applied_patch "$1") || exit 1
 
+# Properly handle spaces in file names
+saved_IFS=$IFS
+IFS=$'\n'
+
 if [ -z "$opt_sort" ]
 then
        files=( $(files_in_patch_ordered $patch) )
@@ -160,6 +164,8 @@ else
        files=( $(files_in_patch $patch | sort) )
 fi
 
+IFS=$saved_IFS
+
 if [ -n "$opt_fork" -a $# -ne 0 ]
 then
        printf $"Can only refresh the topmost patch with -z currently\n" >&2
@@ -213,17 +219,17 @@ do
                old_file=$workdir/$file
                new_file=$file
        else
-               old_file=$(backup_file_name $patch $file)
-               next_patch=$(next_patch_for_file $patch $file)
+               old_file=$(backup_file_name $patch "$file")
+               next_patch=$(next_patch_for_file $patch "$file")
                if [ -z "$next_patch" ]
                then
                        new_file=$file
                else
-                       new_file=$(backup_file_name $next_patch $file)
+                       new_file=$(backup_file_name $next_patch "$file")
                        files_were_shadowed=1
                fi
        fi
-       if ! diff_file $file $old_file $new_file
+       if ! diff_file "$file" "$old_file" "$new_file"
        then
                printf $"Diff failed, aborting\n" >&2
                die 1

-- 
Jean Delvare
Suse L3

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

Reply via email to