Mercurial > public > mercurial-scm > hg-stable
view contrib/revsetbenchmarks.py @ 20851:4130ec938c84
revsetbenchmark: convert performance call to proper subprocess call
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 26 Mar 2014 18:26:18 -0700 |
parents | d0c2535c7aba |
children | b2353501d6dc |
line wrap: on
line source
#!/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, CalledProcessError def update(rev): """update the repo to a revision""" try: check_call(['hg', 'update', '--quiet', '--check', str(rev)]) except CalledProcessError, exc: print >> sys.stderr, 'update to revision %s failed, aborting' % rev sys.exit(exc.returncode) def perf(revset): """run benchmark for this very revset""" try: check_call(['./hg', '--config', 'extensions.perf=contrib/perf.py', 'perfrevset', revset]) except CalledProcessError, exc: print >> sys.stderr, 'abort: cannot run revset benchmark' sys.exit(exc.returncode) 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 "----------------------------" update(r) for idx, rset in enumerate(revsets): sys.stdout.write("%i) " % idx) sys.stdout.flush() perf(rset) print "----------------------------"