--- a/mercurial/filemerge.py Wed Jun 28 13:50:20 2017 +0200
+++ b/mercurial/filemerge.py Mon Jun 26 22:52:15 2017 -0700
@@ -298,10 +298,10 @@
"""Uses the other `p2()` version of files as the merged version."""
if fco.isabsent():
# local changed, remote deleted -- 'deleted' picked
- repo.wvfs.unlinkpath(fcd.path())
+ _underlyingfctxifabsent(fcd).remove()
deleted = True
else:
- repo.wwrite(fcd.path(), fco.data(), fco.flags())
+ _underlyingfctxifabsent(fcd).write(fco.data(), fco.flags())
deleted = False
return 0, deleted
@@ -313,9 +313,19 @@
used to resolve these conflicts."""
# for change/delete conflicts write out the changed version, then fail
if fcd.isabsent():
- repo.wwrite(fcd.path(), fco.data(), fco.flags())
+ _underlyingfctxifabsent(fcd).write(fco.data(), fco.flags())
return 1, False
+def _underlyingfctxifabsent(filectx):
+ """Sometimes when resolving, our fcd is actually an absentfilectx, but
+ we want to write to it (to do the resolve). This helper returns the
+ underyling workingfilectx in that case.
+ """
+ if filectx.isabsent():
+ return filectx.changectx()[filectx.path()]
+ else:
+ return filectx
+
def _premerge(repo, fcd, fco, fca, toolconf, files, labels=None):
tool, toolpath, binary, symlink = toolconf
if symlink or fcd.isabsent() or fco.isabsent():