Skip to content
Snippets Groups Projects
Commit 7d852bb47b0a authored by Pierre-Yves David's avatar Pierre-Yves David
Browse files

merge: give priority to "not at head" failures for bare 'hg merge'

We refuse to pick a destination for a bare 'hg merge' if the working copy is not
at head. This is meant to prevent strange merge from user who forget to update.
(Moreover, such merge does not reduce actually the number of heads)

However, we were doing that as the last possible failure type. So user were
recommended to merge with an explicit head (from this bad location) if the
branch had too many heads.

We now make "not on branch heads" class of failure the first things to check
and fail on. The one test that change was actually trying to check for these
failure (and did not). The new test output is correct.
parent bd74b5e0d2c0
No related branches found
No related tags found
No related merge requests found
......@@ -193,7 +193,8 @@
def _destmergebranch(repo):
"""find merge destination based on branch heads"""
node = None
parent = repo.dirstate.p1()
branch = repo[None].branch()
bheads = repo.branchheads(branch)
nbhs = [bh for bh in bheads if not repo[bh].bookmarks()]
......@@ -196,9 +197,16 @@
branch = repo[None].branch()
bheads = repo.branchheads(branch)
nbhs = [bh for bh in bheads if not repo[bh].bookmarks()]
if parent not in bheads:
if len(repo.heads()) <= 1:
msg, hint = msgdestmerge['nootherheadsbehind']
else:
msg, hint = msgdestmerge['notatheads']
raise error.Abort(msg, hint=hint)
if len(nbhs) > 2:
msg, hint = msgdestmerge['toomanyheads']
msg %= (branch, len(bheads))
raise error.Abort(msg, hint=hint)
......@@ -200,12 +208,11 @@
if len(nbhs) > 2:
msg, hint = msgdestmerge['toomanyheads']
msg %= (branch, len(bheads))
raise error.Abort(msg, hint=hint)
parent = repo.dirstate.p1()
if len(nbhs) <= 1:
if len(bheads) > 1:
msg, hint = msgdestmerge['bookmarkedheads']
elif len(repo.heads()) > 1:
msg, hint = msgdestmerge['nootherbranchheads']
msg %= branch
......@@ -206,12 +213,10 @@
if len(nbhs) <= 1:
if len(bheads) > 1:
msg, hint = msgdestmerge['bookmarkedheads']
elif len(repo.heads()) > 1:
msg, hint = msgdestmerge['nootherbranchheads']
msg %= branch
elif parent != repo.lookup(branch):
msg, hint = msgdestmerge['nootherheadsbehind']
else:
msg, hint = msgdestmerge['nootherheads']
raise error.Abort(msg, hint=hint)
......@@ -214,10 +219,7 @@
else:
msg, hint = msgdestmerge['nootherheads']
raise error.Abort(msg, hint=hint)
if parent not in bheads:
msg, hint = msgdestmerge['notatheads']
raise error.Abort(msg, hint=hint)
if parent == nbhs[0]:
node = nbhs[-1]
else:
......
......@@ -27,8 +27,8 @@
Should fail because not at a head:
$ hg merge
abort: branch 'default' has 3 heads - please merge with an explicit rev
(run 'hg heads .' to see heads)
abort: working directory not at a head revision
(use 'hg update' or merge with an explicit revision)
[255]
$ hg up
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment