diff --git a/contrib/perf.py b/contrib/perf.py --- a/contrib/perf.py +++ b/contrib/perf.py @@ -2247,17 +2247,24 @@ def perfbranchmapload(ui, repo, filter=b 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: diff --git a/tests/test-contrib-perf.t b/tests/test-contrib-perf.t --- a/tests/test-contrib-perf.t +++ b/tests/test-contrib-perf.t @@ -143,6 +143,7 @@ perfstatus $ hg perfunidiff --alldata 1 $ hg perfbookmarks $ hg perfbranchmap + $ hg perfbranchmapload $ hg perfcca $ hg perfchangegroupchangelog $ hg perfchangegroupchangelog --cgversion 01