changeset 14535:e597ef52a7c2

patch: dot not ignore hunk of files marked as 'deleted' git 'deleted' flag was processed unconditionnally and the file removed even if the related hunk was not matching.
author Patrick Mezard <pmezard@gmail.com>
date Sun, 05 Jun 2011 22:26:01 +0200
parents ecc79816d31e
children 52cbeb5a651b
files mercurial/patch.py tests/test-git-import.t
diffstat 2 files changed, 26 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/patch.py	Sun Jun 05 22:24:19 2011 +0200
+++ b/mercurial/patch.py	Sun Jun 05 22:26:01 2011 +0200
@@ -1237,12 +1237,12 @@
                 if gp.oldpath:
                     copysource = pstrip(gp.oldpath)
                 changed[path] = gp
-                if gp.op == 'DELETE':
-                    backend.unlink(path)
-                    continue
                 if gp.op == 'RENAME':
                     backend.unlink(copysource)
                 if not first_hunk:
+                    if gp.op == 'DELETE':
+                        backend.unlink(path)
+                        continue
                     data, mode = None, None
                     if gp.op in ('RENAME', 'COPY'):
                         data, mode = store.getfile(copysource)
--- a/tests/test-git-import.t	Sun Jun 05 22:24:19 2011 +0200
+++ b/tests/test-git-import.t	Sun Jun 05 22:26:01 2011 +0200
@@ -442,4 +442,27 @@
   [255]
   $ cat b
   b
+
+  $ ln -s b linkb
+  $ hg add linkb
+  $ hg ci -m addlinkb
+  $ hg import --no-commit - <<EOF
+  > diff --git a/linkb b/linkb
+  > deleted file mode 120000
+  > --- a/linkb
+  > +++ /dev/null
+  > @@ -1,1 +0,0 @@
+  > -badhunk
+  > \ No newline at end of file
+  > EOF
+  applying patch from stdin
+  patching file linkb
+  Hunk #1 FAILED at 0
+  1 out of 1 hunks FAILED -- saving rejects to file linkb.rej
+  abort: patch failed to apply
+  [255]
+  $ hg st
+  ? b.rej
+  ? linkb.rej
+
   $ cd ..