# HG changeset patch # User Patrick Mezard # Date 1336775047 -7200 # Node ID 58edd786e96f6083fb3ea1346b646d1db8706ffb # Parent 6b3d31d04a699a40cbdad57d6806615b7ae6ce5f phase: make if abort on nullid for the good reason The good reason being you cannot call retractboundary() on nullid, not revset.set() cannot resolve '-1'. diff -r 6b3d31d04a69 -r 58edd786e96f mercurial/commands.py --- a/mercurial/commands.py Sat May 12 00:24:07 2012 +0200 +++ b/mercurial/commands.py Sat May 12 00:24:07 2012 +0200 @@ -4375,9 +4375,9 @@ lock = repo.lock() try: # set phase - nodes = [ctx.node() for ctx in repo.set('%ld', revs)] - if not nodes: - raise util.Abort(_('empty revision set')) + if not revs: + raise util.Abort(_('empty revision set')) + nodes = [repo[r].node() for r in revs] olddata = repo._phasecache.getphaserevs(repo)[:] phases.advanceboundary(repo, targetphase, nodes) if opts['force']: diff -r 6b3d31d04a69 -r 58edd786e96f mercurial/phases.py --- a/mercurial/phases.py Sat May 12 00:24:07 2012 +0200 +++ b/mercurial/phases.py Sat May 12 00:24:07 2012 +0200 @@ -101,6 +101,7 @@ import errno from node import nullid, nullrev, bin, hex, short from i18n import _ +import util allphases = public, draft, secret = range(3) trackedphases = allphases[1:] @@ -250,6 +251,8 @@ newroots = [n for n in nodes if self.phase(repo, repo[n].rev()) < targetphase] if newroots: + if nullid in newroots: + raise util.Abort(_('cannot change null revision phase')) currentroots = currentroots.copy() currentroots.update(newroots) ctxs = repo.set('roots(%ln::)', currentroots) diff -r 6b3d31d04a69 -r 58edd786e96f tests/test-phases.t --- a/tests/test-phases.t Sat May 12 00:24:07 2012 +0200 +++ b/tests/test-phases.t Sat May 12 00:24:07 2012 +0200 @@ -13,7 +13,7 @@ Cannot change null revision phase $ hg phase --force --secret null - abort: unknown revision '-1'! + abort: cannot change null revision phase [255] $ hg phase null -1: public