diff --git a/hgext/fix.py b/hgext/fix.py --- a/hgext/fix.py +++ b/hgext/fix.py @@ -144,9 +144,9 @@ match as matchmod, mdiff, merge, - obsolete, pycompat, registrar, + rewriteutil, scmutil, util, worker, @@ -403,7 +403,7 @@ checkfixablectx(ui, repo, repo[rev]) if revs: cmdutil.checkunfinished(repo) - checknodescendants(repo, revs) + rewriteutil.precheck(repo, revs, b'fix') if opts.get(b'working_dir'): revs.add(wdirrev) if list(merge.mergestate.read(repo).unresolved()): @@ -415,22 +415,8 @@ return revs -def checknodescendants(repo, revs): - if not obsolete.isenabled(repo, obsolete.allowunstableopt) and repo.revs( - b'(%ld::) - (%ld)', revs, revs - ): - raise error.Abort( - _(b'can only fix a changeset together with all its descendants') - ) - - def checkfixablectx(ui, repo, ctx): """Aborts if the revision shouldn't be replaced with a fixed one.""" - if not ctx.mutable(): - raise error.Abort( - b'can\'t fix immutable changeset %s' - % (scmutil.formatchangeid(ctx),) - ) if ctx.obsolete(): # It would be better to actually check if the revision has a successor. allowdivergence = ui.configbool( diff --git a/tests/test-fix.t b/tests/test-fix.t --- a/tests/test-fix.t +++ b/tests/test-fix.t @@ -264,10 +264,12 @@ $ hg commit -Aqm "hello" $ hg phase -r 0 --public $ hg fix -r 0 - abort: can't fix immutable changeset 0:6470986d2e7b + abort: cannot fix public changesets + (see 'hg help phases' for details) [255] $ hg fix -r 0 --working-dir - abort: can't fix immutable changeset 0:6470986d2e7b + abort: cannot fix public changesets + (see 'hg help phases' for details) [255] $ hg cat -r tip hello.whole hello @@ -1171,7 +1173,7 @@ $ printf "two\n" > foo.whole $ hg commit -m "second" $ hg --config experimental.evolution.allowunstable=False fix -r '.^' - abort: can only fix a changeset together with all its descendants + abort: cannot fix changeset with children [255] $ hg fix -r '.^' 1 new orphan changesets