D5637: branchmap: add some clarifications and clean up flow

mjpieters (Martijn Pieters) phabricator at mercurial-scm.org
Mon Jan 21 18:08:22 UTC 2019


mjpieters created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  - Remove indentation where it is not needed.
  
  - Swap the subset test branches to follow along logically and put the 'empty' case last.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D5637

AFFECTED FILES
  mercurial/branchmap.py

CHANGE DETAILS

diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py
--- a/mercurial/branchmap.py
+++ b/mercurial/branchmap.py
@@ -44,22 +44,33 @@
                'immutable': 'base'}
 
 def updatecache(repo):
+    """Update the cache for the given filtered view on a repository"""
+    # This can trigger updates for the caches for subsets of the filtered
+    # view, e.g. when there is no cache for this filtered view or the cache
+    # is stale.
+
     cl = repo.changelog
     filtername = repo.filtername
     bcache = repo._branchcaches.get(filtername)
+    if bcache is None or not bcache.validfor(repo):
+        # cache object missing or cache object stale? Read from disk
+        bcache = branchcache.fromfile(repo)
 
     revs = []
-    if bcache is None or not bcache.validfor(repo):
-        bcache = branchcache.fromfile(repo)
-        if bcache is None:
-            subsetname = subsettable.get(filtername)
-            if subsetname is None:
-                bcache = branchcache()
-            else:
-                subset = repo.filtered(subsetname)
-                bcache = subset.branchmap().copy()
-                extrarevs = subset.changelog.filteredrevs - cl.filteredrevs
-                revs.extend(r for  r in extrarevs if r <= bcache.tiprev)
+    if bcache is None:
+        # no (fresh) cache available anymore, perhaps we can re-use
+        # the cache for a subset, then extend that to add info on missing
+        # revisions.
+        subsetname = subsettable.get(filtername)
+        if subsetname is not None:
+            subset = repo.filtered(subsetname)
+            bcache = subset.branchmap().copy()
+            extrarevs = subset.changelog.filteredrevs - cl.filteredrevs
+            revs.extend(r for r in extrarevs if r <= bcache.tiprev)
+        else:
+            # nothing to fall back on, start empty.
+            bcache = branchcache()
+
     revs.extend(cl.revs(start=bcache.tiprev + 1))
     if revs:
         bcache.update(repo, revs)



To: mjpieters, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list