contrib/benchmarks/revset.py
author Kyle Lippincott <spectral@google.com>
Tue, 08 Oct 2019 10:40:36 -0700
changeset 43113 37af48031d6f
parent 43076 2372284d9457
child 48966 6000f5b25c9b
permissions -rw-r--r--
hghave: document format for version feature checks as <name><vers>, no dots I had a bit of a difficult time when attempting to fix a use of `py-38` when trying to figure out what the correct way of specifying the feature was. By having the strings 'py-3*' and 'py3.8' in the hghave.checkvers docstring, I would have had a much easier time of it instead of having to trace exactly what was happening here. Differential Revision: https://phab.mercurial-scm.org/D7023

# 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


def createrevsetbenchmark(baseset, variants=None):
    if variants is None:
        # Default variants
        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()
    )

    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)

        f.__name__ = fname
        return f

    return wrap(fname, baseset)


def initializerevsetbenchmarks():
    mod = sys.modules[__name__]
    with open(os.path.join(basedir, 'contrib', 'base-revsets.txt'), 'rb') as fh:
        for line in fh:
            baseset = line.strip()
            if baseset and not baseset.startswith('#'):
                func = createrevsetbenchmark(baseset)
                setattr(mod, func.__name__, func)


initializerevsetbenchmarks()