mirror of
git://slackware.nl/current.git
synced 2025-01-15 15:41:54 +01:00
79 lines
2.1 KiB
Diff
79 lines
2.1 KiB
Diff
|
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
|
||
|
|