revset.py
57 lines
| 1.6 KiB
| text/x-python
|
PythonLexer
Philippe Pepiot
|
r30406 | # revset.py - asv revset benchmarks | ||
# | ||||
# Copyright 2016 Logilab SA <contact@logilab.fr> | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
'''ASV revset benchmarks generated from contrib/base-revsets.txt | ||||
Each revset benchmark is parameterized with variants (first, last, sort, ...) | ||||
''' | ||||
from __future__ import absolute_import | ||||
import os | ||||
import string | ||||
import sys | ||||
from . import basedir, perfbench | ||||
Augie Fackler
|
r43346 | |||
Philippe Pepiot
|
r30406 | def createrevsetbenchmark(baseset, variants=None): | ||
if variants is None: | ||||
# Default variants | ||||
Augie Fackler
|
r43346 | variants = ["plain", "first", "last", "sort", "sort+first", "sort+last"] | ||
fname = "track_" + "_".join( | ||||
"".join( | ||||
[c if c in string.digits + string.letters else " " for c in baseset] | ||||
).split() | ||||
) | ||||
Philippe Pepiot
|
r30406 | |||
def wrap(fname, baseset): | ||||
@perfbench(name=baseset, params=[("variant", variants)]) | ||||
def f(perf, variant): | ||||
revset = baseset | ||||
if variant != "plain": | ||||
for var in variant.split("+"): | ||||
revset = "%s(%s)" % (var, revset) | ||||
return perf("perfrevset", revset) | ||||
Augie Fackler
|
r43346 | |||
Philippe Pepiot
|
r30406 | f.__name__ = fname | ||
return f | ||||
Augie Fackler
|
r43346 | |||
Philippe Pepiot
|
r30406 | return wrap(fname, baseset) | ||
Augie Fackler
|
r43346 | |||
Philippe Pepiot
|
r30406 | def initializerevsetbenchmarks(): | ||
mod = sys.modules[__name__] | ||||
Augie Fackler
|
r43346 | with open(os.path.join(basedir, 'contrib', 'base-revsets.txt'), 'rb') as fh: | ||
Philippe Pepiot
|
r30406 | for line in fh: | ||
baseset = line.strip() | ||||
if baseset and not baseset.startswith('#'): | ||||
func = createrevsetbenchmark(baseset) | ||||
setattr(mod, func.__name__, func) | ||||
Augie Fackler
|
r43346 | |||
Philippe Pepiot
|
r30406 | initializerevsetbenchmarks() | ||