contrib/perf.py
changeset 40720 0a3cc351d718
parent 40719 578646b1e2b6
child 40721 0adc2c0a0792
--- a/contrib/perf.py	Fri Nov 23 02:11:11 2018 +0100
+++ b/contrib/perf.py	Fri Nov 23 02:08:01 2018 +0100
@@ -2247,17 +2247,24 @@
                 ui.status(b'%s - %s\n'
                           % (filtername, util.bytecount(st.st_size)))
         return
-    if filter:
+    if not filter:
+        filter = None
+    subsettable = getbranchmapsubsettable()
+    if filter is None:
+        repo = repo.unfiltered()
+    else:
         repo = repoview.repoview(repo, filter)
-    else:
-        repo = repo.unfiltered()
 
     repo.branchmap() # make sure we have a relevant, up to date branchmap
 
+    currentfilter = filter
     # try once without timer, the filter may not be cached
-    if branchmap.read(repo) is None:
-        raise error.Abort(b'No branchmap cached for %s repo'
-                          % (filter or b'unfiltered'))
+    while branchmap.read(repo) is None:
+        currentfilter = subsettable.get(currentfilter)
+        if currentfilter is None:
+            raise error.Abort(b'No branchmap cached for %s repo'
+                              % (filter or b'unfiltered'))
+        repo = repo.filtered(currentfilter)
     timer, fm = gettimer(ui, opts)
     def setup():
         if clearrevlogs: