[PATCH 5 of 5 mergedriver V2] merge.mergestate: compute dirstate action
Siddharth Agarwal
sid0 at fb.com
Thu Nov 19 12:53:08 CST 2015
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1447959002 28800
# Thu Nov 19 10:50:02 2015 -0800
# Node ID 0ce719f9080e9dccb02929b675a14f1b36bf74f4
# Parent 5ac34a97b978556e38e2e264ecefb7e903e98c16
# Available At http://42.netv6.net/sid0-wip/hg/
# hg pull http://42.netv6.net/sid0-wip/hg/ -r 0ce719f9080e
merge.mergestate: compute dirstate action
In upcoming patches we're going to queue these actions up to be applied to the
dirstate at the end.
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -410,7 +410,7 @@ class mergestate(object):
def _resolve(self, preresolve, dfile, wctx, labels=None):
"""rerun merge process for file path `dfile`"""
if self[dfile] in 'rd':
- return True, 0
+ return True, 0, None
stateentry = self._state[dfile]
state, hash, lfile, afile, anode, ofile, onode, flags = stateentry
octx = self._repo[self._other]
@@ -445,19 +445,35 @@ class mergestate(object):
self._dirty = True
elif not r:
self.mark(dfile, 'r')
- return complete, r
+
+ action = None
+ if complete:
+ if deleted:
+ if not fcd.isabsent(): # cd: remote picked (or otherwise deleted)
+ action = 'r'
+ # else: dc: local picked (no action necessary)
+ else:
+ if fcd.isabsent(): # dc: remote picked
+ action = 'g'
+ elif fco.isabsent(): # cd: local picked
+ action = 'a'
+ # else: regular merges (no action necessary)
+
+ return complete, r, action
def preresolve(self, dfile, wctx, labels=None):
"""run premerge process for dfile
Returns whether the merge is complete, and the exit code."""
- return self._resolve(True, dfile, wctx, labels=labels)
+ complete, r, action = self._resolve(True, dfile, wctx, labels=labels)
+ return complete, r
def resolve(self, dfile, wctx, labels=None):
"""run merge process (assuming premerge was run) for dfile
Returns the exit code of the merge."""
- return self._resolve(False, dfile, wctx, labels=labels)[1]
+ complete, r, action = self._resolve(False, dfile, wctx, labels=labels)
+ return r
def _checkunknownfile(repo, wctx, mctx, f, f2=None):
if f2 is None:
More information about the Mercurial-devel
mailing list