[PATCH] revset: use a baseset in _notpublic()

Augie Fackler raf at durin42.com
Mon Jun 22 09:12:19 CDT 2015


On Thu, Jun 18, 2015 at 10:04:55AM -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1433991507 25200
> #      Wed Jun 10 19:58:27 2015 -0700
> # Node ID 32d7dee9420183af58bd5ce150908425e708de77
> # Parent  e0d29cae67f9ad7324fc4818bed2248aeef0af83
> revset: use a baseset in _notpublic()

Queued, thanks.

>
> The '_notpublic()' internal revset was "returning" a set. That was wrong. We now
> return a 'baseset' as appropriate. This has no effect on performance in most case,
> because we do the exact same operation than what the combination with a
> 'fullreposet' was doing. This as a small effect on some operation when combined
> with other set, because we now apply the filtering in all cases. I think the
> correctness is worth the impact on some corner cases. The optimizer should take
> care of these corner cases anyway.
>
> revset #0: not public()
>    plain         min           max           first         last          reverse
> 0) 0.000465      0.000491      0.000495      0.000500      0.000494      0.000479
> 1) 0.000484      0.000503      0.000498      0.000505      0.000504      0.000491
>
> revset #1: (tip~1000::) - public()
>    plain         min           max           first         last          reverse
> 0) 0.002765      0.001742      0.002767      0.001730      0.002761      0.002782
> 1) 0.002847      0.001777      0.002776      0.001741      0.002764      0.002858
>
> revset #2: not public() and branch("default")
>    plain         min           max           first         last          reverse
> 0) 0.012104      0.011138      0.011189      0.011138      0.011166      0.011578
> 1) 0.011387  94% 0.011738 105% 0.014220 127% 0.011223      0.011184      0.012077
>
> revset #3: (not public() - obsolete())
>    plain         min           max           first         last          reverse
> 0) 0.000583      0.000556      0.000552      0.000555      0.000552      0.000610
> 1) 0.000613 105% 0.000559      0.000557      0.000573      0.000558      0.000613
>
> revset #4: head() - public()
>    plain         min           max           first         last          reverse
> 0) 0.010869      0.010800      0.011547      0.010843      0.010891      0.010891
> 1) 0.011031      0.011497 106% 0.011087      0.011100      0.011100      0.011085
>
> diff --git a/mercurial/revset.py b/mercurial/revset.py
> --- a/mercurial/revset.py
> +++ b/mercurial/revset.py
> @@ -1536,12 +1536,12 @@ def _notpublic(repo, subset, x):
>      repo._phasecache.loadphaserevs(repo) # ensure phase's sets are loaded
>      if repo._phasecache._phasesets:
>          s = set()
>          for u in repo._phasecache._phasesets[1:]:
>              s.update(u)
> -        # XXX we should turn this into a baseset instead of a set, smartset may
> -        # do some optimisations from the fact this is a baseset.
> +        s = baseset(s - repo.changelog.filteredrevs)
> +        s.sort()
>          return subset & s
>      else:
>          phase = repo._phasecache.phase
>          target = phases.public
>          condition = lambda r: phase(repo, r) != target
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list