[PATCH] revset: use a baseset in _notpublic()
Augie Fackler
raf at durin42.com
Mon Jun 22 14:12:19 UTC 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