changeset 41567:c795c462b1d6

branchmap: add some clarifications and clean up flow - Remove indentation where it is not needed. - Swap the subset test branches to follow along logically and put the 'empty' case last. Differential Revision: https://phab.mercurial-scm.org/D5637
author Martijn Pieters <mj@octobus.net>
date Mon, 21 Jan 2019 17:41:59 +0000
parents eb7ce452e0fb
children 641c8b66a825
files mercurial/branchmap.py
diffstat 1 files changed, 22 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/branchmap.py	Mon Jan 21 16:37:23 2019 +0000
+++ b/mercurial/branchmap.py	Mon Jan 21 17:41:59 2019 +0000
@@ -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)