# HG changeset patch # User Martin von Zweigbergk # Date 2014-12-12 06:07:41 # Node ID a7a0f32a383fd4d5285620bd8fce721618b759bd # Parent b46b9865dd0843861e5e0ba541f0c2728f686738 merge: make calculateupdates() return file->action dict This simplifies largefiles' overridecalculateupdates(), which no longer has to do the conversion it started doing in 38e55e55ae4d (largefiles: rewrite merge code using dictionary with entry per file, 2014-12-09). To keep this patch small, we'll leave the name 'actionbyfile' in overrides.py. It will be renamed in the next patch. diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -435,15 +435,13 @@ def overridecalculateupdates(origfn, rep # Convert to dictionary with filename as key and action as value. lfiles = set() - actionbyfile = {} - for m, l in actions.iteritems(): - for f, args, msg in l: - actionbyfile[f] = m, args, msg - splitstandin = f and lfutil.splitstandin(f) - if splitstandin in p1: - lfiles.add(splitstandin) - elif lfutil.standin(f) in p1: - lfiles.add(f) + actionbyfile = actions + for f in actionbyfile: + splitstandin = f and lfutil.splitstandin(f) + if splitstandin in p1: + lfiles.add(splitstandin) + elif lfutil.standin(f) in p1: + lfiles.add(f) for lfile in lfiles: standin = lfutil.standin(lfile) @@ -489,14 +487,7 @@ def overridecalculateupdates(origfn, rep actionbyfile[lfile] = ('g', largs, 'replaces standin') actionbyfile[standin] = ('r', None, 'replaced by non-standin') - # Convert back to dictionary-of-lists format - for l in actions.itervalues(): - l[:] = [] - actions['lfmr'] = [] - for f, (m, args, msg) in actionbyfile.iteritems(): - actions[m].append((f, args, msg)) - - return actions, diverge, renamedelete + return actionbyfile, diverge, renamedelete def mergerecordupdates(orig, repo, actions, branchmerge): if 'lfmr' in actions: diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -621,12 +621,6 @@ def calculateupdates(repo, wctx, mctx, a fractions = _forgetremoved(wctx, mctx, branchmerge) actions.update(fractions) - # Convert to dictionary-of-lists format - actionbyfile = actions - actions = dict((m, []) for m in 'a f g cd dc r dm dg m e k'.split()) - for f, (m, args, msg) in actionbyfile.iteritems(): - actions[m].append((f, args, msg)) - return actions, diverge, renamedelete def batchremove(repo, actions): @@ -1069,9 +1063,15 @@ def update(repo, node, branchmerge, forc followcopies = True ### calculate phase - actions, diverge, renamedelete = calculateupdates( + actionbyfile, diverge, renamedelete = calculateupdates( 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()) + for f, (m, args, msg) in actionbyfile.iteritems(): + if m not in actions: + actions[m] = [] + actions[m].append((f, args, msg)) if not util.checkcase(repo.path): # check collision between files only in p2 for clean update