diff -r 9a1e3d705c2c -r e741972017d9 mercurial/merge.py --- a/mercurial/merge.py Sat May 17 00:47:42 2014 -0700 +++ b/mercurial/merge.py Fri May 02 01:09:14 2014 +0200 @@ -571,8 +571,11 @@ return actions +actionpriority = dict((m, p) for p, m in enumerate( + ['r', 'f', 'g', 'a', 'k', 'm', 'dm', 'dg', 'dr', 'cd', 'dc', 'rd', 'e'])) + def actionkey(a): - return a[1] in "rf" and -1 or 0, a + return actionpriority[a[1]], a def getremove(repo, mctx, overwrite, args): """apply usually-non-interactive updates to the working directory @@ -848,16 +851,16 @@ for a in actions: f, m, args, msg = a - if m == "r": # remove + if m == "r": # remove (must come first) if branchmerge: repo.dirstate.remove(f) else: repo.dirstate.drop(f) + elif m == "f": # forget (must come first) + repo.dirstate.drop(f) elif m == "a": # re-add if not branchmerge: repo.dirstate.add(f) - elif m == "f": # forget - repo.dirstate.drop(f) elif m == "e": # exec change repo.dirstate.normallookup(f) elif m == "k": # keep