From patchwork Sun May 28 06:15:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [6,of,8] hidden: remove _consistencyblockers() From: via Mercurial-devel X-Patchwork-Id: 20971 Message-Id: To: mercurial-devel@mercurial-scm.org Cc: Pierre-Yves David Date: Sat, 27 May 2017 23:15:34 -0700 # HG changeset patch # User Martin von Zweigbergk # Date 1495950919 25200 # Sat May 27 22:55:19 2017 -0700 # Node ID f8b3d943ff21a2b906f2806476a637aac93763c4 # Parent 8b91ef8f7f051165c098f3ebfc871e90afada070 hidden: remove _consistencyblockers() Roughly speaking, we currently do this to reveal hidden ancestors of visible revisions: 1. Iterate over all visible non-public revisions and see if they have hidden parents 2. For each revision found in step (1) walk the chain of hidden commits and reveal it We can simplify that by skipping step (1) and doing step (2) from all visible non-public revisions instead. This doesn't seem to have much impact on "perfvolatilesets". Before: ! obsolete ! wall 0.004616 comb 0.000000 user 0.000000 sys 0.000000 (best of 570) ! visible ! wall 0.008235 comb 0.010000 user 0.010000 sys 0.000000 (best of 326) After: ! obsolete ! wall 0.004727 comb 0.010000 user 0.010000 sys 0.000000 (best of 543) ! visible ! wall 0.008371 comb 0.000000 user 0.000000 sys 0.000000 (best of 324) diff --git a/mercurial/repoview.py b/mercurial/repoview.py --- a/mercurial/repoview.py +++ b/mercurial/repoview.py @@ -44,20 +44,6 @@ anchors.update(rev(t[0]) for t in tags.values() if t[0] in nodemap) return anchors -def _consistencyblocker(pfunc, hideable, revs): - """return non-hideable changeset blocking hideable one - - For consistency, we cannot actually hide a changeset if one of it children - are visible, this function find such children. - """ - blockers = set() - for r in revs: - for p in pfunc(r): - if p != nullrev and p in hideable: - blockers.add(r) - break - return blockers - def _revealancestors(hidden, pfunc, revs): """reveals contiguous chains of hidden ancestors of 'revs' by removing them from 'hidden' @@ -89,16 +75,12 @@ mutablephases = (phases.draft, phases.secret) mutable = repo._phasecache.getrevset(repo, mutablephases) - visible = mutable - hidden - blockers = _consistencyblocker(pfunc, hidden, visible) - - # check if we have wd parents, bookmarks or tags pointing to hidden - # changesets and remove those. - blockers |= (hidden & anchorrevs(repo)) - if blockers: + visible = set(mutable - hidden) + visible |= (hidden & anchorrevs(repo)) + if visible: # don't modify possibly cached result of hideablerevs() hidden = hidden.copy() - _revealancestors(hidden, pfunc, blockers) + _revealancestors(hidden, pfunc, visible) return frozenset(hidden) def computeunserved(repo):