diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -258,6 +258,17 @@ def manifestmerge(repo, p1, p2, pa, over return action +def actioncmp(a1, a2): + m1 = a1[1] + m2 = a2[1] + if m1 == m2: + return cmp(a1, a2) + if m1 == 'r': + return -1 + if m2 == 'r': + return 1 + return cmp(a1, a2) + def applyupdates(repo, action, wctx, mctx): "apply the merge action list to the working directory" @@ -265,7 +276,7 @@ def applyupdates(repo, action, wctx, mct ms = mergestate(repo) ms.reset(wctx.parents()[0].node()) moves = [] - action.sort() + action.sort(actioncmp) # prescan for merges for a in action: diff --git a/tests/test-update-reverse.out b/tests/test-update-reverse.out --- a/tests/test-update-reverse.out +++ b/tests/test-update-reverse.out @@ -46,9 +46,9 @@ resolving manifests side2: remote deleted -> r side1: remote deleted -> r main: remote created -> g -getting main removing side1 removing side2 +getting main 1 files updated, 0 files merged, 2 files removed, 0 files unresolved Should only show a main a