diff --git a/mercurial/patch.py b/mercurial/patch.py index 9a99224a6409b80be7ff5c653c308dfda16ae4b2_bWVyY3VyaWFsL3BhdGNoLnB5..6d42c797ca6e36ad4d6e20edc9162144c06f44c8_bWVyY3VyaWFsL3BhdGNoLnB5 100644 --- 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 index 9a99224a6409b80be7ff5c653c308dfda16ae4b2_dGVzdHMvdGVzdC1tcS1taXNzaW5nZmlsZXMudA==..6d42c797ca6e36ad4d6e20edc9162144c06f44c8_dGVzdHMvdGVzdC1tcS1taXNzaW5nZmlsZXMudA== 100644 --- 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 ..