diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -1341,8 +1341,12 @@ def update(repo, node, branchmerge, forc fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2) ### check phase - if not overwrite and len(pl) > 1: - raise error.Abort(_("outstanding uncommitted merge")) + if not overwrite: + if len(pl) > 1: + raise error.Abort(_("outstanding uncommitted merge")) + ms = mergestate.read(repo) + if list(ms.unresolved()): + raise error.Abort(_("outstanding merge conflicts")) if branchmerge: if pas == [p2]: raise error.Abort(_("merging with a working directory ancestor" diff --git a/tests/test-merge-local.t b/tests/test-merge-local.t --- a/tests/test-merge-local.t +++ b/tests/test-merge-local.t @@ -59,6 +59,9 @@ Local merge with bad merge tool: use 'hg resolve' to retry unresolved file merges [1] + $ hg resolve -m + (no more unresolved files) + $ hg co 0 merging zzz1_merge_ok merging zzz2_merge_bad @@ -83,6 +86,9 @@ Local merge with bad merge tool: Local merge with conflicts: + $ hg resolve -m + (no more unresolved files) + $ hg co merging zzz1_merge_ok merging zzz2_merge_bad @@ -91,6 +97,9 @@ Local merge with conflicts: use 'hg resolve' to retry unresolved file merges [1] + $ hg resolve -m + (no more unresolved files) + $ hg co 0 --config 'ui.origbackuppath=.hg/origbackups' merging zzz1_merge_ok merging zzz2_merge_bad @@ -124,6 +133,9 @@ Local merge without conflicts: $ hg revert zzz2_merge_bad + $ hg resolve -m + (no more unresolved files) + $ hg co merging zzz1_merge_ok 4 files updated, 1 files merged, 2 files removed, 0 files unresolved diff --git a/tests/test-resolve.t b/tests/test-resolve.t --- a/tests/test-resolve.t +++ b/tests/test-resolve.t @@ -154,6 +154,26 @@ resolve -m should abort when no merge in abort: resolve command not applicable when not merging [255] +can not update or merge when there are unresolved conflicts + + $ hg up -qC 0 + $ echo quux >> file1 + $ hg up 1 + merging file1 + warning: conflicts while merging file1! (edit, then use 'hg resolve --mark') + 1 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges + [1] + $ hg up 0 + abort: outstanding merge conflicts + [255] + $ hg merge 2 + abort: outstanding merge conflicts + [255] + $ hg merge --force 2 + abort: outstanding merge conflicts + [255] + set up conflict-free merge $ hg up -qC 3