mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
perf: get subsettable from appropriate module for Mercurial earlier than 2.9
Before this patch, using branchmap.subsettable prevents perfbranchmap from measuring performance of Mercurial earlier than 2.9 (or aad678a92970), because aad678a92970 moved subsettable from repoview.py to branchmap.py, even though there are some code paths for Mercurial earlier than 2.9 in perf.py. For example, setting "_prereadsize" attribute in perfindex() and perfnodelookup() is effective only with hg earlier than 1.8 (or 1299f0c14572). To get subsettable from appropriate module, this patch examines existence of subsettable in branchmap and repoview. This patch also adds check-perf-code.py an extra check entry to detect direct usage of subsettable attribute in perf.py.
This commit is contained in:
parent
0f1711011f
commit
9d79ac8dbc
@ -214,6 +214,24 @@ def safeattrsetter(obj, name, ignoremissing=False):
|
||||
|
||||
return attrutil()
|
||||
|
||||
# utilities to examine each internal API changes
|
||||
|
||||
def getbranchmapsubsettable():
|
||||
# for "historical portability":
|
||||
# subsettable is defined in:
|
||||
# - branchmap since 2.9 (or 175c6fd8cacc)
|
||||
# - repoview since 2.5 (or 59a9f18d4587)
|
||||
for mod in (branchmap, repoview):
|
||||
subsettable = getattr(mod, 'subsettable', None)
|
||||
if subsettable:
|
||||
return subsettable
|
||||
|
||||
# bisecting in bcee63733aad::59a9f18d4587 can reach here (both
|
||||
# branchmap and repoview modules exist, but subsettable attribute
|
||||
# doesn't)
|
||||
raise error.Abort(("perfbranchmap not available with this Mercurial"),
|
||||
hint="use 2.5 or later")
|
||||
|
||||
# perf commands
|
||||
|
||||
@command('perfwalk', formatteropts)
|
||||
@ -848,10 +866,11 @@ def perfbranchmap(ui, repo, full=False, **opts):
|
||||
return d
|
||||
# add filter in smaller subset to bigger subset
|
||||
possiblefilters = set(repoview.filtertable)
|
||||
subsettable = getbranchmapsubsettable()
|
||||
allfilters = []
|
||||
while possiblefilters:
|
||||
for name in possiblefilters:
|
||||
subset = branchmap.subsettable.get(name)
|
||||
subset = subsettable.get(name)
|
||||
if subset not in possiblefilters:
|
||||
break
|
||||
else:
|
||||
|
@ -10,6 +10,8 @@ import sys
|
||||
# write static check patterns here
|
||||
perfpypats = [
|
||||
[
|
||||
(r'(branchmap|repoview)\.subsettable',
|
||||
"use getbranchmapsubsettable() for early Mercurial"),
|
||||
],
|
||||
# warnings
|
||||
[
|
||||
|
Loading…
Reference in New Issue
Block a user