--- a/mercurial/merge.py Mon Nov 30 10:03:21 2015 -0800
+++ b/mercurial/merge.py Mon Nov 30 10:19:39 2015 -0800
@@ -479,7 +479,10 @@
if fcd.isabsent(): # dc: remote picked
action = 'g'
elif fco.isabsent(): # cd: local picked
- action = 'a'
+ if dfile in self.localctx:
+ action = 'am'
+ else:
+ action = 'a'
# else: regular merges (no action necessary)
self._results[dfile] = r, action
@@ -524,7 +527,7 @@
def actions(self):
"""return lists of actions to perform on the dirstate"""
- actions = {'r': [], 'f': [], 'a': [], 'g': []}
+ actions = {'r': [], 'f': [], 'a': [], 'am': [], 'g': []}
for f, (r, action) in self._results.iteritems():
if action is not None:
actions[action].append((f, None, "merge result"))
@@ -631,7 +634,7 @@
if actions:
# k, dr, e and rd are no-op
- for m in 'a', 'f', 'g', 'cd', 'dc':
+ for m in 'a', 'am', 'f', 'g', 'cd', 'dc':
for f, args, msg in actions[m]:
pmmf.add(f)
for f, args, msg in actions['r']:
@@ -1065,6 +1068,12 @@
z += 1
progress(_updating, z, item=f, total=numupdates, unit=_files)
+ # re-add/mark as modified (manifest only, just log it)
+ for f, args, msg in actions['am']:
+ repo.ui.debug(" %s: %s -> am\n" % (f, msg))
+ z += 1
+ progress(_updating, z, item=f, total=numupdates, unit=_files)
+
# keep (noop, just log it)
for f, args, msg in actions['k']:
repo.ui.debug(" %s: %s -> k\n" % (f, msg))
@@ -1189,6 +1198,13 @@
if not branchmerge:
repo.dirstate.add(f)
+ # re-add/mark as modified
+ for f, args, msg in actions.get('am', []):
+ if branchmerge:
+ repo.dirstate.normallookup(f)
+ else:
+ repo.dirstate.add(f)
+
# exec change
for f, args, msg in actions.get('e', []):
repo.dirstate.normallookup(f)
@@ -1390,7 +1406,7 @@
repo, wc, p2, pas, branchmerge, force, partial, mergeancestor,
followcopies)
# Convert to dictionary-of-lists format
- actions = dict((m, []) for m in 'a f g cd dc r dm dg m e k'.split())
+ actions = dict((m, []) for m in 'a am f g cd dc r dm dg m e k'.split())
for f, (m, args, msg) in actionbyfile.iteritems():
if m not in actions:
actions[m] = []
@@ -1411,6 +1427,8 @@
"use (c)hanged version or (d)elete?"
"$$ &Changed $$ &Delete") % f, 0):
actions['r'].append((f, None, "prompt delete"))
+ elif f in p1:
+ actions['am'].append((f, None, "prompt keep"))
else:
actions['a'].append((f, None, "prompt keep"))