Patchwork [6,of,9,v2] hidden: remove _consistencyblockers()

login
register
mail settings
Submitter via Mercurial-devel
Date May 30, 2017, 8:29 p.m.
Message ID <114579789985724a694d.1496176173@martinvonz.svl.corp.google.com>
Download mbox | patch
Permalink /patch/21080/
State Accepted
Headers show

Comments

via Mercurial-devel - May 30, 2017, 8:29 p.m.
# HG changeset patch
# User Martin von Zweigbergk <martinvonz@google.com>
# Date 1495950919 25200
#      Sat May 27 22:55:19 2017 -0700
# Node ID 114579789985724a694d86b9ea7ae7f37343c172
# Parent  fedf0f5eb5c446861cd0257a591e1fd131f53676
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)

Patch

diff --git a/mercurial/repoview.py b/mercurial/repoview.py
--- a/mercurial/repoview.py
+++ b/mercurial/repoview.py
@@ -44,19 +44,6 @@ 
         pinned.update(rev(t[0]) for t in tags.values() if t[0] in nodemap)
     return pinned
 
-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(pfunc, hidden, revs):
     """reveals contiguous chains of hidden ancestors of 'revs' by removing them
@@ -89,16 +76,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 & pinnedrevs(repo))
-        if blockers:
+        visible = set(mutable - hidden)
+        visible |= (hidden & pinnedrevs(repo))
+        if visible:
             # don't modify possibly cached result of hideablerevs()
             hidden = hidden.copy()
-            _revealancestors(pfunc, hidden, blockers)
+            _revealancestors(pfunc, hidden, visible)
     return frozenset(hidden)
 
 def computeunserved(repo):