summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/patch.c12
-rw-r--r--tests/copy-rename24
2 files changed, 31 insertions, 5 deletions
diff --git a/src/patch.c b/src/patch.c
index 2c51f44..6b41f79 100644
--- a/src/patch.c
+++ b/src/patch.c
@@ -244,7 +244,7 @@ main (int argc, char **argv)
if (outfile)
outname = outfile;
else if (pch_copy () || pch_rename ())
- outname = pch_name (! strcmp (inname, pch_name (OLD)));
+ outname = pch_name (! reverse);
else
outname = inname;
}
@@ -351,16 +351,18 @@ main (int argc, char **argv)
if (verbosity != SILENT)
{
bool renamed = strcmp (inname, outname);
+ bool skip_rename = ! renamed && pch_rename ();
say ("%s %s %s%c",
dry_run ? "checking" : "patching",
S_ISLNK (file_type) ? "symbolic link" : "file",
- quotearg (outname), renamed ? ' ' : '\n');
- if (renamed)
- say ("(%s from %s)\n",
+ quotearg (outname), renamed || skip_rename ? ' ' : '\n');
+ if (renamed || skip_rename)
+ say ("(%s%s from %s)\n",
+ skip_rename ? "already " : "",
pch_copy () ? "copied" :
(pch_rename () ? "renamed" : "read"),
- inname);
+ ! skip_rename ? inname : pch_name (! strcmp (inname, pch_name (OLD))));
if (verbosity == VERBOSE)
say ("Using Plan %s...\n", using_plan_a ? "A" : "B");
}
diff --git a/tests/copy-rename b/tests/copy-rename
index fd5fd64..ef9bc8e 100644
--- a/tests/copy-rename
+++ b/tests/copy-rename
@@ -63,6 +63,30 @@ check 'cat h' <<EOF
new
EOF
+echo old > h
+
+check 'patch -p1 < rename.diff || echo "Status: $?"' <<EOF
+patching file h (already renamed from f)
+EOF
+
+ncheck 'test ! -e f'
+
+check 'cat h' <<EOF
+new
+EOF
+
+mv h f
+
+check 'patch -p1 -R < rename.diff || echo "Status: $?"' <<EOF
+patching file f (already renamed from h)
+EOF
+
+ncheck 'test ! -e h'
+
+check 'cat f' <<EOF
+old
+EOF
+
# --------------------------------------------------------------
# Patches with no hunks