# HG changeset patch # User Durham Goode # Date 1413181804 25200 # Node ID 40f46fd7c50e160675c66bc040cd654947291871 # Parent 5f5d6db79f3147828b51fe02ef16a775d2bc2b68 phases: change phase command change detection A future patch is going to make phase computation lazy, so the phase command can no longer read and diff the entire phase list directly. This changes the phase command to build it's own list for diff purposes. diff -r 5f5d6db79f31 -r 40f46fd7c50e mercurial/commands.py --- a/mercurial/commands.py Fri Oct 10 13:09:22 2014 -0700 +++ b/mercurial/commands.py Sun Oct 12 23:30:04 2014 -0700 @@ -4855,7 +4855,11 @@ if not revs: raise util.Abort(_('empty revision set')) nodes = [repo[r].node() for r in revs] - olddata = repo._phasecache.getphaserevs(repo)[:] + # moving revision from public to draft may hide them + # We have to check result on an unfiltered repository + unfi = repo.unfiltered() + getphase = unfi._phasecache.phase + olddata = [getphase(unfi, r) for r in unfi] phases.advanceboundary(repo, tr, targetphase, nodes) if opts['force']: phases.retractboundary(repo, tr, targetphase, nodes) @@ -4864,11 +4868,9 @@ if tr is not None: tr.release() lock.release() - # moving revision from public to draft may hide them - # We have to check result on an unfiltered repository - unfi = repo.unfiltered() - newdata = repo._phasecache.getphaserevs(unfi) - changes = sum(o != newdata[i] for i, o in enumerate(olddata)) + getphase = unfi._phasecache.phase + newdata = [getphase(unfi, r) for r in unfi] + changes = sum(newdata[r] != olddata[r] for r in unfi) cl = unfi.changelog rejected = [n for n in nodes if newdata[cl.rev(n)] < targetphase]