diff options
-rw-r--r-- | quilt/header.in | 4 | ||||
-rw-r--r-- | quilt/refresh.in | 9 | ||||
-rw-r--r-- | quilt/scripts/patchfns.in | 14 | ||||
-rw-r--r-- | test/symlink.test | 37 |
4 files changed, 52 insertions, 12 deletions
diff --git a/quilt/header.in b/quilt/header.in index a3bbcbc..6a9121f 100644 --- a/quilt/header.in +++ b/quilt/header.in @@ -159,9 +159,7 @@ else cat_file "$patch_file_or_null" | patch_body >> $tmp2 || exit 1 - if ( [ -z "$QUILT_BACKUP" -o ! -e $patch_file ] || \ - mv $patch_file $patch_file~ ) && \ - cat_to_new_file $patch_file < $tmp2 + if cat_to_new_file $patch_file $QUILT_BACKUP < $tmp2 then if [ -z "$opt_append" ] then diff --git a/quilt/refresh.in b/quilt/refresh.in index aa9a2ae..a10659f 100644 --- a/quilt/refresh.in +++ b/quilt/refresh.in @@ -323,14 +323,7 @@ if [ -e "$patch_file" ] && \ diff -q "$patch_file" $tmp_result > /dev/null then printf $"Patch %s is unchanged\n" "$(print_patch "$patch")" -elif ( [ -z "$QUILT_BACKUP" -o ! -e "$patch_file" ] || \ - if [ -L "$patch_file" ] ; \ - then \ - cp -p "$patch_file" "$patch_file~"; \ - else \ - mv "$patch_file" "$patch_file~"; \ - fi ) && \ - cat_to_new_file "$patch_file" < $tmp_result +elif cat_to_new_file "$patch_file" $QUILT_BACKUP < $tmp_result then if [ -n "$opt_fork" ] then diff --git a/quilt/scripts/patchfns.in b/quilt/scripts/patchfns.in index efb6e8e..ab4e725 100644 --- a/quilt/scripts/patchfns.in +++ b/quilt/scripts/patchfns.in @@ -783,7 +783,19 @@ cat_file() cat_to_new_file() { - local filename="$1" + local filename=$1 backup=$2 + + # If the file exists, back it up if requested. Return immediately upon + # failure. + if [ -e "$filename" -a -n "$backup" ] + then + if [ -L "$filename" ] + then + cp -p "$filename" "$filename~" + else + mv "$filename" "$filename~" + fi || return + fi # If the destination file is a symbolic link, preserve it unless its # target is read-only. In other cases, delete the patch file first in diff --git a/test/symlink.test b/test/symlink.test index a9fa45a..342ec10 100644 --- a/test/symlink.test +++ b/test/symlink.test @@ -55,6 +55,43 @@ $ [ patches/test.diff~ -nt test.timeref ] && echo "mtimes differ" +# Test the header update + $ quilt header -a + < A test patch + > Appended text to header of patch patches/test.diff + + $ readlink patches/test.diff + > ../test.diff + +# Test the header update with a backup + $ touch -r patches/test.diff test.timeref + $ quilt header -r --backup + > Replaced header of patch patches/test.diff + + $ readlink patches/test.diff + > ../test.diff + + $ cat patches/test.diff + > --- a/foo + > +++ b/foo + > @@ -1 +1 @@ + > -foo + > +foo changed 3 + + $ readlink patches/test.diff~ + $ echo %{?} + > 1 + + $ cat patches/test.diff~ + > A test patch + > --- a/foo + > +++ b/foo + > @@ -1 +1 @@ + > -foo + > +foo changed 3 + + $ [ patches/test.diff~ -nt test.timeref ] && echo "mtimes differ" + # Test the refresh when target is read-only $ chmod -w test.diff $ echo "foo changed 4" > foo |