# HG changeset patch # User Martin von Zweigbergk # Date 2019-05-09 04:25:23 # Node ID b3fc78c028efa8c39545b9cedc471111675bba4b # Parent 65f3a77223e0879cce326fd33d1db5bebdfff79a absorb: be more specific when erroring out on merge commit When you have a merge commit checked out and run `hg absorb`, it would tell you abort: no mutable changeset to change That makes it sound like the problem is public commits when isn't really. Let's be more specific in this case. There was already a test case that test this, so that now prints the new message. I added a new test case that shows the old message (when a public commit is checked out). Differential Revision: https://phab.mercurial-scm.org/D6354 diff --git a/hgext/absorb.py b/hgext/absorb.py --- a/hgext/absorb.py +++ b/hgext/absorb.py @@ -914,7 +914,10 @@ def absorb(ui, repo, stack=None, targetc """ if stack is None: limit = ui.configint('absorb', 'max-stack-size') - stack = getdraftstack(repo['.'], limit) + headctx = repo['.'] + if len(headctx.parents()) > 1: + raise error.Abort(_('cannot absorb into a merge')) + stack = getdraftstack(headctx, limit) if limit and len(stack) >= limit: ui.warn(_('absorb: only the recent %d changesets will ' 'be analysed\n') diff --git a/tests/test-absorb.t b/tests/test-absorb.t --- a/tests/test-absorb.t +++ b/tests/test-absorb.t @@ -176,7 +176,7 @@ Bookmarks are moved: b2 2:c9b20c925790 * ba 2:c9b20c925790 -Non-mofified files are ignored: +Non-modified files are ignored: $ touch b $ hg commit -A b -m b @@ -225,10 +225,15 @@ Public commits will not be changed: 2: 4d 2: insert aftert 4d + $ hg co -qC 1 + $ sedi 's/Insert/insert/' a + $ hg absorb --apply-changes + abort: no mutable changeset to change + [255] + Make working copy clean: - $ hg revert -q -C a b - $ hg forget c + $ hg co -qC ba $ rm c $ hg status @@ -261,7 +266,7 @@ Merge commit will not be changed: $ echo 2 >> m1 $ echo 2 >> m2 $ hg absorb --apply-changes - abort: no mutable changeset to change + abort: cannot absorb into a merge [255] $ hg revert -q -C m1 m2