Comments
Patch
@@ -563,7 +563,10 @@ class mergeresult(object):
It has information about what actions need to be performed on dirstate
mapping of divergent renames and other such cases. '''
- NO_OP_ACTIONS = (mergestatemod.ACTION_KEEP,)
+ NO_OP_ACTIONS = (
+ mergestatemod.ACTION_KEEP,
+ mergestatemod.ACTION_KEEP_ABSENT,
+ )
def __init__(self):
"""
@@ -1175,6 +1178,11 @@ def calculateupdates(
repo.ui.note(_(b" %s: picking 'keep' action\n") % f)
mresult.addfile(f, *bids[mergestatemod.ACTION_KEEP][0])
continue
+ # If keep absent is an option, just do that
+ if mergestatemod.ACTION_KEEP_ABSENT in bids:
+ repo.ui.note(_(b" %s: picking 'keep absent' action\n") % f)
+ mresult.addfile(f, *bids[mergestatemod.ACTION_KEEP_ABSENT][0])
+ continue
# If there are gets and they all agree [how could they not?], do it.
if mergestatemod.ACTION_GET in bids:
ga0 = bids[mergestatemod.ACTION_GET][0]
@@ -1486,6 +1494,11 @@ def applyupdates(
):
repo.ui.debug(b" %s: %s -> k\n" % (f, msg))
# no progress
+ for f, args, msg in mresult.getactions(
+ (mergestatemod.ACTION_KEEP_ABSENT,), sort=True
+ ):
+ repo.ui.debug(b" %s: %s -> ka\n" % (f, msg))
+ # no progress
# directory rename, move local
for f, args, msg in mresult.getactions(
@@ -120,6 +120,10 @@ ACTION_MERGE = b'm'
ACTION_LOCAL_DIR_RENAME_GET = b'dg'
ACTION_DIR_RENAME_MOVE_LOCAL = b'dm'
ACTION_KEEP = b'k'
+# the file was absent on local side before merge and we should
+# keep it absent (absent means file not present, it can be a result
+# of file deletion, rename etc.)
+ACTION_KEEP_ABSENT = b'ka'
ACTION_EXEC = b'e'
ACTION_CREATED_MERGE = b'cm'
@@ -837,6 +841,10 @@ def recordupdates(repo, actions, branchm
for f, args, msg in actions.get(ACTION_KEEP, []):
pass
+ # keep deleted
+ for f, args, msg in actions.get(ACTION_KEEP_ABSENT, []):
+ pass
+
# get
for f, args, msg in actions.get(ACTION_GET, []):
if branchmerge: