diff --git a/hgext/absorb.py b/hgext/absorb.py --- a/hgext/absorb.py +++ b/hgext/absorb.py @@ -914,7 +914,10 @@ """ 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 @@ 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 @@ 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 @@ $ 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