summaryrefslogtreecommitdiffstats
path: root/source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff
diff options
context:
space:
mode:
Diffstat (limited to 'source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff')
-rw-r--r--source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff78
1 files changed, 78 insertions, 0 deletions
diff --git a/source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff b/source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff
new file mode 100644
index 000000000..b882b725c
--- /dev/null
+++ b/source/a/patch/patch.281537bcd92515ae3b9f154acd579ce97260f99b.diff
@@ -0,0 +1,78 @@
+From 281537bcd92515ae3b9f154acd579ce97260f99b Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@linbit.com>
+Date: Thu, 13 Sep 2012 14:13:08 +0000
+Subject: 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.
+---
+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'
+--
+cgit v0.9.0.2
+