# HG changeset patch # User Boris Feld # Date 2018-11-23 01:08:01 # Node ID 0a3cc351d7189969b98c7f926b408837683f003b # Parent 578646b1e2b685f8d499e38ee210d3ec5847a550 perf: fallback to subset if ondisk cache is missing in perfbranchmapload If there is no branchmap on disk for that filter, it means that the cache from some subset's filter is relevant for this one. We look for it instead of aborting. That way it is much simpler to run the command in an automated way. We can now add it to `test-contrib-perf.t`. 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