[PATCH STABLE] patch: keep patching after missing copy source (issue3480)
Patrick Mezard
patrick at mezard.eu
Fri Jun 1 15:43:45 UTC 2012
# HG changeset patch
# User Patrick Mezard <patrick at mezard.eu>
# Date 1338565076 -7200
# Branch stable
# Node ID 8c9a99cca340b214614a6b8cb2d21ed90632b426
# Parent 0568c499c44a1fe46e1ddbda1d3ce5000841ef80
patch: keep patching after missing copy source (issue3480)
When applying a patch renaming/copying 'a' to 'b' on a revision where
'a' does not exist, the patching process would abort immediately,
without processing the remaining hunks and without reporting it. This
patch makes the patching no longer abort and possible hunks applied on
the copied/renamed file be written in reject files.
diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -1343,8 +1343,17 @@
elif state == 'git':
for gp in values:
path = pstrip(gp.oldpath)
- data, mode = backend.getfile(path)
- store.setfile(path, data, mode)
+ try:
+ data, mode = backend.getfile(path)
+ except IOError, e:
+ if e.errno != errno.ENOENT:
+ raise
+ # The error ignored here will trigger a getfile()
+ # error in a place more appropriate for error
+ # handling, and will not interrupt the patching
+ # process.
+ else:
+ store.setfile(path, data, mode)
else:
raise util.Abort(_('unsupported parser state: %s') % state)
diff --git a/tests/test-mq-missingfiles.t b/tests/test-mq-missingfiles.t
--- a/tests/test-mq-missingfiles.t
+++ b/tests/test-mq-missingfiles.t
@@ -73,6 +73,53 @@
+c
+c
+Test missing renamed file
+
+ $ hg qpop
+ popping changeb
+ patch queue now empty
+ $ hg up -qC 0
+ $ echo a > a
+ $ hg mv b bb
+ $ python ../writelines.py bb 2 'b\n' 10 'a\n' 2 'c\n'
+ $ echo c > c
+ $ hg add a c
+ $ hg qnew changebb
+ $ hg qpop
+ popping changebb
+ patch queue now empty
+ $ hg up -qC 1
+ $ hg qpush
+ applying changebb
+ patching file bb
+ Hunk #1 FAILED at 0
+ Hunk #2 FAILED at 7
+ 2 out of 2 hunks FAILED -- saving rejects to file bb.rej
+ b not tracked!
+ patch failed, unable to continue (try -v)
+ patch failed, rejects left in working dir
+ errors during apply, please fix and refresh changebb
+ [2]
+ $ cat a
+ a
+ $ cat c
+ c
+ $ cat bb.rej
+ --- bb
+ +++ bb
+ @@ -1,3 +1,5 @@
+ +b
+ +b
+ a
+ a
+ a
+ @@ -8,3 +10,5 @@
+ a
+ a
+ a
+ +c
+ +c
+
$ cd ..
More information about the Mercurial-devel
mailing list