Patchwork [3,of,5,mergedriver,V2] filemerge: return whether the file is deleted from all other merge tools

login
register
mail settings
Submitter Siddharth Agarwal
Date Nov. 19, 2015, 6:53 p.m.
Message ID <9e1889bae61fc0ffc961.1447959186@dev666.prn1.facebook.com>
Download mbox | patch
Permalink /patch/11527/
State Accepted
Headers show

Comments

Siddharth Agarwal - Nov. 19, 2015, 6:53 p.m.
# HG changeset patch
# User Siddharth Agarwal <sid0@fb.com>
# Date 1447883731 28800
#      Wed Nov 18 13:55:31 2015 -0800
# Node ID 9e1889bae61fc0ffc961ba6ccec9c99d2107fc04
# Parent  bea5b9e9469807afa0c56144acd2c7d3db0dcc49
# Available At http://42.netv6.net/sid0-wip/hg/
#              hg pull http://42.netv6.net/sid0-wip/hg/ -r 9e1889bae61f
filemerge: return whether the file is deleted from all other merge tools

This is required for change/delete conflicts -- see the previous patch for more
information.

Patch

diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -307,7 +307,7 @@  def _merge(repo, mynode, orig, fcd, fco,
     ui = repo.ui
 
     r = simplemerge.simplemerge(ui, a, b, c, label=labels, mode=mode)
-    return True, r
+    return True, r, False
 
 @internaltool('union', fullmerge,
               _("warning: conflicts while merging %s! "
@@ -368,7 +368,7 @@  def _imergelocal(*args, **kwargs):
     Like :merge, but resolve all conflicts non-interactively in favor
     of the local changes."""
     success, status = _imergeauto(localorother='local', *args, **kwargs)
-    return success, status
+    return success, status, False
 
 @internaltool('merge-other', mergeonly, precheck=_mergecheck)
 def _imergeother(*args, **kwargs):
@@ -376,7 +376,7 @@  def _imergeother(*args, **kwargs):
     Like :merge, but resolve all conflicts non-interactively in favor
     of the other changes."""
     success, status = _imergeauto(localorother='other', *args, **kwargs)
-    return success, status
+    return success, status, False
 
 @internaltool('tagmerge', mergeonly,
               _("automatic tag merging of %s failed! "
@@ -386,7 +386,8 @@  def _itagmerge(repo, mynode, orig, fcd, 
     """
     Uses the internal tag merge algorithm (experimental).
     """
-    return tagmerge.merge(repo, fcd, fco, fca)
+    success, status = tagmerge.merge(repo, fcd, fco, fca)
+    return success, status, False
 
 @internaltool('dump', fullmerge)
 def _idump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None):
@@ -404,7 +405,7 @@  def _idump(repo, mynode, orig, fcd, fco,
     util.copyfile(a, a + ".local")
     repo.wwrite(fd + ".other", fco.data(), fco.flags())
     repo.wwrite(fd + ".base", fca.data(), fca.flags())
-    return False, 1
+    return False, 1, False
 
 def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None):
     tool, toolpath, binary, symlink = toolconf
@@ -431,7 +432,7 @@  def _xmerge(repo, mynode, orig, fcd, fco
     repo.ui.debug('launching merge tool: %s\n' % cmd)
     r = ui.system(cmd, cwd=repo.root, environ=env)
     repo.ui.debug('merge tool returned: %s\n' % r)
-    return True, r
+    return True, r, False
 
 def _formatconflictmarker(repo, ctx, template, label, pad):
     """Applies the given template to the ctx, prefixed by the label.
@@ -574,8 +575,9 @@  def _filemerge(premerge, repo, mynode, o
             # complete if premerge successful (r is 0)
             return not r, r
 
-        needcheck, r = func(repo, mynode, orig, fcd, fco, fca, toolconf, files,
-                            labels=labels)
+        needcheck, r, deleted = func(repo, mynode, orig, fcd, fco, fca,
+                                     toolconf, files, labels=labels)
+
         if needcheck:
             r = _check(r, ui, tool, fcd, files)