#!/usr/bin/env python
# Measure the performance of a list of revsets against multiple revisions
# defined by parameter. Checkout one by one and run perfrevset with every
# revset in the list to benchmark its performance.
#
# - First argument is a revset of mercurial own repo to runs against.
# - Second argument is the file from which the revset array will be taken
# If second argument is omitted read it from standard input
#
# You should run this from the root of your mercurial repository.
#
# This script also does one run of the current version of mercurial installed
# to compare performance.
import sys
from subprocess import check_call, check_output
HG="hg update --quiet --check"
PERF="./hg --config extensions.perf=contrib/perf.py perfrevset"
target_rev = sys.argv[1]
revsetsfile = sys.stdin
if len(sys.argv) > 2:
revsetsfile = open(sys.argv[2])
revsets = [l.strip() for l in revsetsfile]
print "Revsets to benchmark"
print "----------------------------"
for idx, rset in enumerate(revsets):
print "%i) %s" % (idx, rset)
print "----------------------------"
print
revs = check_output("hg log --template='{rev}\n' --rev " + target_rev,
shell=True)
revs = [r for r in revs.split() if r]
# Benchmark revisions
for r in revs:
print "----------------------------"
sys.stdout.write("Revision: ")
sys.stdout.flush()
check_call('hg log -r %s --template "{desc|firstline}\n"' % r, shell=True)
print "----------------------------"
check_call(HG + ' ' + r, shell=True)
for idx, rset in enumerate(revsets):
sys.stdout.write("%i) " % idx)
sys.stdout.flush()
check_call(PERF + ' "%s"' % rset, shell=True)
print "----------------------------"