[PATCH 3 of 6 mergedriver] filemerge: in ':fail' tool, write out other side if local side is deleted

Siddharth Agarwal sid0 at fb.com
Tue Nov 24 16:02:38 CST 2015


# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1448391421 28800
#      Tue Nov 24 10:57:01 2015 -0800
# Node ID 2ba8e74e9de139060fdbe67ac769e5fcf0f27651
# Parent  f959d838869ced41c19dbcc1c0abd936cc84b972
# Available At http://42.netv6.net/sid0-wip/hg/
#              hg pull http://42.netv6.net/sid0-wip/hg/ -r 2ba8e74e9de1
filemerge: in ':fail' tool, write out other side if local side is deleted

We do this because we don't want to modify the dirstate for failures, and don't
just want to leave the file missing from disk. Plus it's more useful for the
user if the changed side is written out -- it is easier to delete a file than
to get it back via hg revert.

diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -285,6 +285,9 @@ def _ifail(repo, mynode, orig, fcd, fco,
     Rather than attempting to merge files that were modified on both
     branches, it marks them as unresolved. The resolve command must be
     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())
     return 1, False
 
 def _premerge(repo, fcd, fco, fca, toolconf, files, labels=None):


More information about the Mercurial-devel mailing list