diff options
author | Andreas Gruenbacher <agruen@linbit.com> | 2012-09-13 16:13:08 +0200 |
---|---|---|
committer | Andreas Gruenbacher <agruen@linbit.com> | 2012-09-13 16:32:53 +0200 |
commit | 281537bcd92515ae3b9f154acd579ce97260f99b (patch) | |
tree | a1ddc6f6a3eb47176a08d79800db397620ef799f | |
parent | dc3cdeebca6639aac25a7d87dea816a03ed345da (diff) | |
download | patch-281537bcd92515ae3b9f154acd579ce97260f99b.tar.gz |
In a git-style diff, make sure not to unlink the original by accident
* src/patch.c (main): Fail if a file is not empty as expected.
(output_files): In a git-style diff, make sure not to unlink the original when
making a backup of an unmodified file.
* tests/create-delete: Fix failed-file-deletion test and add
successful-file-deletion test.
-rw-r--r-- | src/patch.c | 3 | ||||
-rw-r--r-- | tests/create-delete | 27 |
2 files changed, 28 insertions, 2 deletions
diff --git a/src/patch.c b/src/patch.c index 1c6fb4b..ce81bbe 100644 --- a/src/patch.c +++ b/src/patch.c @@ -508,6 +508,7 @@ main (int argc, char **argv) && ! (merge && somefailed)) { mismatch = true; + somefailed = true; if (verbosity != SILENT) say ("File %s is not empty after patch, as expected\n", quotearg (outname)); @@ -1865,7 +1866,7 @@ output_files (struct stat const *st) output_file_now (file_to_output->from, &from_needs_removal, from_st, file_to_output->to, file_to_output->mode, file_to_output->backup); - if (from_needs_removal) + if (file_to_output->to && from_needs_removal) unlink (file_to_output->from); if (st && st->st_dev == from_st->st_dev && st->st_ino == from_st->st_ino) diff --git a/tests/create-delete b/tests/create-delete index 9a6e1bb..7eed11f 100644 --- a/tests/create-delete +++ b/tests/create-delete @@ -176,12 +176,37 @@ EOF echo data > target cat > p.diff <<EOF diff --git a/target b/target -index 1..0 +deleted file mode 100644 +index 1269488..0000000 EOF check 'patch -p1 -b < p.diff || echo status: $?' <<EOF patching file target File target is not empty after patch, as expected +status: 1 +EOF + +check 'cat target' <<EOF +data +EOF + +# Patch creates a backup file even when the original file remains unchanged: +check 'cat target.orig' <<EOF +data +EOF + +cat > p.diff <<EOF +diff --git a/target b/target +deleted file mode 100644 +index 1269488..0000000 +--- a/target ++++ /dev/null +@@ -1 +0,0 @@ +-data +EOF + +check 'patch -p1 -b -f < p.diff || echo status: $?' <<EOF +patching file target EOF ncheck 'test ! -e target' |