--- a/mercurial/merge.py Thu Jun 27 11:09:09 2019 +0200
+++ b/mercurial/merge.py Thu Jun 27 11:39:35 2019 +0200
@@ -1472,10 +1472,10 @@
Yields arbitrarily many (False, tuple) for progress updates, followed by
exactly one (True, filedata). When wantfiledata is false, filedata is an
- empty list. When wantfiledata is true, filedata[i] is a triple (mode, size,
- mtime) of the file written for action[i].
+ empty dict. When wantfiledata is true, filedata[f] is a triple (mode, size,
+ mtime) of the file f written for each action.
"""
- filedata = []
+ filedata = {}
verbose = repo.ui.verbose
fctx = mctx.filectx
ui = repo.ui
@@ -1509,7 +1509,7 @@
s = wfctx.lstat()
mode = s.st_mode
mtime = s[stat.ST_MTIME]
- filedata.append((mode, size, mtime)) # for dirstate.normal
+ filedata[f] = ((mode, size, mtime)) # for dirstate.normal
if i == 100:
yield False, (i, f)
i = 0
@@ -1670,7 +1670,7 @@
actions[ACTION_GET],
threadsafe=threadsafe,
hasretval=True)
- getfiledata = []
+ getfiledata = {}
for final, res in prog:
if final:
getfiledata = res
@@ -1803,7 +1803,8 @@
actions[k].extend(acts)
if k == ACTION_GET and wantfiledata:
# no filedata until mergestate is updated to provide it
- getfiledata.extend([None] * len(acts))
+ for a in acts:
+ getfiledata[a[0]] = None
# Remove these files from actions[ACTION_MERGE] as well. This is
# important because in recordupdates, files in actions[ACTION_MERGE]
# are processed after files in other actions, and the merge driver
@@ -1873,11 +1874,11 @@
pass
# get
- for i, (f, args, msg) in enumerate(actions.get(ACTION_GET, [])):
+ for f, args, msg in actions.get(ACTION_GET, []):
if branchmerge:
repo.dirstate.otherparent(f)
else:
- parentfiledata = getfiledata[i] if getfiledata else None
+ parentfiledata = getfiledata[f] if getfiledata else None
repo.dirstate.normal(f, parentfiledata=parentfiledata)
# merge