# HG changeset patch # User Martin von Zweigbergk # Date 2020-10-16 22:02:46 # Node ID 7f07e6349e51e1e9e0d2668e4231461ec2cb6703 # Parent e281a1ac12a5c931a1dca1d10acbb8cbec6376f0 fix: don't include obsolete descendants with -s The `-s/--source` option is for regular users (`-r` is there for power users). If there are obsolete commits that are descendants of the given revision(s), then they almost definitely should just be left alone. That's what `hg rebase` does as well. So this patch makes it so we skip obsolete commits (including those in the input set itself). Differential Revision: https://phab.mercurial-scm.org/D9226 diff --git a/hgext/fix.py b/hgext/fix.py --- a/hgext/fix.py +++ b/hgext/fix.py @@ -417,7 +417,7 @@ def getrevstofix(ui, repo, opts): revs = repo.revs(b'(not public() and not obsolete()) or wdir()') elif opts[b'source']: source_revs = scmutil.revrange(repo, opts[b'source']) - revs = set(repo.revs(b'%ld::', source_revs)) + revs = set(repo.revs(b'(%ld::) - obsolete()', source_revs)) if wdirrev in source_revs: # `wdir()::` is currently empty, so manually add wdir revs.add(wdirrev) diff --git a/tests/test-fix-topology.t b/tests/test-fix-topology.t --- a/tests/test-fix-topology.t +++ b/tests/test-fix-topology.t @@ -390,14 +390,11 @@ Test passing multiple revisions to --sou o 0 A $ hg fix -s A - abort: fixing obsolete revision could cause divergence - [255] $ hg fix -s B - abort: fixing obsolete revision could cause divergence + abort: no changesets specified + (use --source or --working-dir) [255] $ hg fix -s D - abort: fixing obsolete revision could cause divergence - [255] $ hg fix -s E $ cd ..