diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -4961,7 +4961,6 @@ def resolve(ui, repo, *pats, **opts): ms.mark(f, "u") else: wctx = repo[None] - mctx = wctx.parents()[-1] # backup pre-resolve (merge uses .orig for its own purposes) a = repo.wjoin(f) @@ -4970,7 +4969,7 @@ def resolve(ui, repo, *pats, **opts): try: # resolve file ui.setconfig('ui', 'forcemerge', opts.get('tool', '')) - if ms.resolve(f, wctx, mctx): + if ms.resolve(f, wctx): ret = 1 finally: ui.setconfig('ui', 'forcemerge', '') diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -186,11 +186,12 @@ class mergestate(object): def mark(self, dfile, state): self._state[dfile][0] = state self._dirty = True - def resolve(self, dfile, wctx, octx): + def resolve(self, dfile, wctx): if self[dfile] == 'r': return 0 stateentry = self._state[dfile] state, hash, lfile, afile, anode, ofile, onode, flags = stateentry + octx = self._repo[self._other] fcd = wctx[dfile] fco = octx[ofile] fca = self._repo.filectx(afile, fileid=anode) @@ -641,7 +642,7 @@ def applyupdates(repo, actions, wctx, mc overwrite) continue audit(fd) - r = ms.resolve(fd, wctx, mctx) + r = ms.resolve(fd, wctx) if r is not None and r > 0: unresolved += 1 else: diff --git a/tests/test-backout.t b/tests/test-backout.t --- a/tests/test-backout.t +++ b/tests/test-backout.t @@ -408,3 +408,93 @@ on branch1, so no file1 and file2: update: (current) $ cd .. + + +Test usage of `hg resolve` in case of conflict +(issue4163) + + $ hg init issue4163 + $ cd issue4163 + $ touch foo + $ hg add foo + $ cat > foo << EOF + > one + > two + > three + > four + > five + > six + > seven + > height + > nine + > ten + > EOF + $ hg ci -m 'initial' + $ cat > foo << EOF + > one + > two + > THREE + > four + > five + > six + > seven + > height + > nine + > ten + > EOF + $ hg ci -m 'capital three' + $ cat > foo << EOF + > one + > two + > THREE + > four + > five + > six + > seven + > height + > nine + > TEN + > EOF + $ hg ci -m 'capital ten' + $ hg backout -r 'desc("capital three")' --tool internal:fail + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges + [1] + $ hg status + $ hg resolve -l # still unresolved + U foo + $ hg summary + parent: 2:b71750c4b0fd tip + capital ten + branch: default + commit: 1 unresolved (clean) + update: (current) + $ hg resolve --all --debug + picked tool 'internal:merge' for foo (binary False symlink False) + merging foo + my foo@b71750c4b0fd+ other foo@a30dd8addae3 ancestor foo@913609522437 + premerge successful + $ hg status + M foo + ? foo.orig + $ hg resolve -l + R foo + $ hg summary + parent: 2:b71750c4b0fd tip + capital ten + branch: default + commit: 1 modified, 1 unknown + update: (current) + $ cat foo + one + two + three + four + five + six + seven + height + nine + TEN + +