contrib/perf.py
changeset 40770 b059388d976c
parent 40769 95f35c873463
child 40771 58355a1de6b3
equal deleted inserted replaced
40769:95f35c873463 40770:b059388d976c
  2296 
  2296 
  2297        $ update for change coming with a new branch
  2297        $ update for change coming with a new branch
  2298        $ hg perfbranchmapupdate --base 'stable' --target 'default'
  2298        $ hg perfbranchmapupdate --base 'stable' --target 'default'
  2299     """
  2299     """
  2300     from mercurial import branchmap
  2300     from mercurial import branchmap
  2301     opts = _byteskwargs(opts)
  2301     from mercurial import repoview
  2302     timer, fm = gettimer(ui, opts)
  2302     opts = _byteskwargs(opts)
       
  2303     timer, fm = gettimer(ui, opts)
       
  2304     unfi = repo.unfiltered()
  2303     x = [None] # used to pass data between closure
  2305     x = [None] # used to pass data between closure
  2304 
  2306 
  2305     # we use a `list` here to avoid possible side effect from smartset
  2307     # we use a `list` here to avoid possible side effect from smartset
  2306     baserevs = list(scmutil.revrange(repo, base))
  2308     baserevs = list(scmutil.revrange(repo, base))
  2307     targetrevs = list(scmutil.revrange(repo, target))
  2309     targetrevs = list(scmutil.revrange(repo, target))
  2320     alltargetrevs = frozenset(cl.ancestors(targetrevs, inclusive=True))
  2322     alltargetrevs = frozenset(cl.ancestors(targetrevs, inclusive=True))
  2321 
  2323 
  2322     newrevs = list(alltargetrevs.difference(allbaserevs))
  2324     newrevs = list(alltargetrevs.difference(allbaserevs))
  2323     newrevs.sort()
  2325     newrevs.sort()
  2324 
  2326 
       
  2327     allrevs = frozenset(unfi.changelog.revs())
       
  2328     basefilterrevs = frozenset(allrevs.difference(allbaserevs))
       
  2329     targetfilterrevs = frozenset(allrevs.difference(alltargetrevs))
       
  2330 
       
  2331     def basefilter(repo, visibilityexceptions=None):
       
  2332         return basefilterrevs
       
  2333 
       
  2334     def targetfilter(repo, visibilityexceptions=None):
       
  2335         return targetfilterrevs
       
  2336 
  2325     msg = b'benchmark of branchmap with %d revisions with %d new ones\n'
  2337     msg = b'benchmark of branchmap with %d revisions with %d new ones\n'
  2326     ui.status(msg % (len(allbaserevs), len(newrevs)))
  2338     ui.status(msg % (len(allbaserevs), len(newrevs)))
  2327 
  2339     if targetfilterrevs:
  2328     if True:
  2340         msg = b'(%d revisions still filtered)\n'
       
  2341         ui.status(msg % len(targetfilterrevs))
       
  2342 
       
  2343     try:
       
  2344         repoview.filtertable[b'__perf_branchmap_update_base'] = basefilter
       
  2345         repoview.filtertable[b'__perf_branchmap_update_target'] = targetfilter
       
  2346 
       
  2347         baserepo = repo.filtered(b'__perf_branchmap_update_base')
       
  2348         targetrepo = repo.filtered(b'__perf_branchmap_update_target')
       
  2349 
  2329         base = branchmap.branchcache()
  2350         base = branchmap.branchcache()
  2330         base.update(repo, allbaserevs)
  2351         base.update(baserepo, allbaserevs)
  2331 
  2352 
  2332         def setup():
  2353         def setup():
  2333             x[0] = base.copy()
  2354             x[0] = base.copy()
  2334 
  2355 
  2335         def bench():
  2356         def bench():
  2336             x[0].update(repo, newrevs)
  2357             x[0].update(targetrepo, newrevs)
  2337 
  2358 
  2338         timer(bench, setup=setup)
  2359         timer(bench, setup=setup)
  2339         fm.end()
  2360         fm.end()
       
  2361     finally:
       
  2362         repoview.filtertable.pop(b'__perf_branchmap_update_base', None)
       
  2363         repoview.filtertable.pop(b'__perf_branchmap_update_target', None)
  2340 
  2364 
  2341 @command(b'perfbranchmapload', [
  2365 @command(b'perfbranchmapload', [
  2342      (b'f', b'filter', b'', b'Specify repoview filter'),
  2366      (b'f', b'filter', b'', b'Specify repoview filter'),
  2343      (b'', b'list', False, b'List brachmap filter caches'),
  2367      (b'', b'list', False, b'List brachmap filter caches'),
  2344      (b'', b'clear-revlogs', False, b'refresh changelog and manifest'),
  2368      (b'', b'clear-revlogs', False, b'refresh changelog and manifest'),