diff -r b059388d976c -r 58355a1de6b3 contrib/perf.py --- a/contrib/perf.py Wed Nov 21 20:35:22 2018 +0000 +++ b/contrib/perf.py Wed Nov 21 21:11:47 2018 +0000 @@ -2347,8 +2347,22 @@ baserepo = repo.filtered(b'__perf_branchmap_update_base') targetrepo = repo.filtered(b'__perf_branchmap_update_target') - base = branchmap.branchcache() - base.update(baserepo, allbaserevs) + # try to find an existing branchmap to reuse + subsettable = getbranchmapsubsettable() + candidatefilter = subsettable.get(None) + while candidatefilter is not None: + candidatebm = repo.filtered(candidatefilter).branchmap() + if candidatebm.validfor(baserepo): + filtered = repoview.filterrevs(repo, candidatefilter) + missing = [r for r in allbaserevs if r in filtered] + base = candidatebm.copy() + base.update(baserepo, missing) + break + candidatefilter = subsettable.get(candidatefilter) + else: + # no suitable subset where found + base = branchmap.branchcache() + base.update(baserepo, allbaserevs) def setup(): x[0] = base.copy()