author | Pierre-Yves David <pierre-yves.david@fb.com> |
Tue, 09 Jun 2015 16:57:18 -0700 | |
changeset 25531 | 371d8afc9144 |
parent 25530 | 94efef10b63f |
child 25532 | 1311aee85dcf |
permissions | -rwxr-xr-x |
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
1 |
#!/usr/bin/env python |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
2 |
|
20746
47fc466825da
contrib: have the revset benchmark test script take a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20745
diff
changeset
|
3 |
# Measure the performance of a list of revsets against multiple revisions |
47fc466825da
contrib: have the revset benchmark test script take a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20745
diff
changeset
|
4 |
# defined by parameter. Checkout one by one and run perfrevset with every |
47fc466825da
contrib: have the revset benchmark test script take a revset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20745
diff
changeset
|
5 |
# revset in the list to benchmark its performance. |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
6 |
# |
20747
8c89433ccdcf
contrib: make revset benchmark script able to read from stdin
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20746
diff
changeset
|
7 |
# - First argument is a revset of mercurial own repo to runs against. |
8c89433ccdcf
contrib: make revset benchmark script able to read from stdin
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20746
diff
changeset
|
8 |
# - Second argument is the file from which the revset array will be taken |
8c89433ccdcf
contrib: make revset benchmark script able to read from stdin
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20746
diff
changeset
|
9 |
# If second argument is omitted read it from standard input |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
10 |
# |
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
11 |
# You should run this from the root of your mercurial repository. |
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
12 |
# |
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
13 |
# This script also does one run of the current version of mercurial installed |
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
14 |
# to compare performance. |
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
15 |
|
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
16 |
import sys |
21548
651d7548a744
revsetbenchmark: automatically finds the perf extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21287
diff
changeset
|
17 |
import os |
25530
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
18 |
import re |
20893
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
19 |
from subprocess import check_call, Popen, CalledProcessError, STDOUT, PIPE |
21287
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
20 |
# cannot use argparse, python 2.7 only |
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
21 |
from optparse import OptionParser |
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
22 |
|
20893
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
23 |
def check_output(*args, **kwargs): |
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
24 |
kwargs.setdefault('stderr', PIPE) |
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
25 |
kwargs.setdefault('stdout', PIPE) |
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
26 |
proc = Popen(*args, **kwargs) |
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
27 |
output, error = proc.communicate() |
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
28 |
if proc.returncode != 0: |
21202
c04e5e937139
revsetbenchmark: fix error raising
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20893
diff
changeset
|
29 |
raise CalledProcessError(proc.returncode, ' '.join(args[0])) |
20893
b5de9dde181c
revsetbenchmark: remove python 2.7 dependency
Durham Goode <durham@fb.com>
parents:
20855
diff
changeset
|
30 |
return output |
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
31 |
|
20850
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
32 |
def update(rev): |
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
33 |
"""update the repo to a revision""" |
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
34 |
try: |
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
35 |
check_call(['hg', 'update', '--quiet', '--check', str(rev)]) |
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
36 |
except CalledProcessError, exc: |
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
37 |
print >> sys.stderr, 'update to revision %s failed, aborting' % rev |
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
38 |
sys.exit(exc.returncode) |
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
39 |
|
25528
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
40 |
|
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
41 |
def hg(cmd, repo=None): |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
42 |
"""run a mercurial command |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
43 |
|
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
44 |
<cmd> is the list of command + argument, |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
45 |
<repo> is an optional repository path to run this command in.""" |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
46 |
fullcmd = ['./hg'] |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
47 |
if repo is not None: |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
48 |
fullcmd += ['-R', repo] |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
49 |
fullcmd += ['--config', |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
50 |
'extensions.perf=' + os.path.join(contribdir, 'perf.py')] |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
51 |
fullcmd += cmd |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
52 |
return check_output(fullcmd, stderr=STDOUT) |
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
53 |
|
21549
ea3d75ebea6d
revsetbenchmark: support for running on other repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21548
diff
changeset
|
54 |
def perf(revset, target=None): |
20851
4130ec938c84
revsetbenchmark: convert performance call to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20850
diff
changeset
|
55 |
"""run benchmark for this very revset""" |
4130ec938c84
revsetbenchmark: convert performance call to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20850
diff
changeset
|
56 |
try: |
25528
a6bcd70cd9c2
revsetbenchmarks: extract call to mercurial into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23139
diff
changeset
|
57 |
output = hg(['perfrevset', revset], repo=target) |
25530
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
58 |
return parseoutput(output) |
20851
4130ec938c84
revsetbenchmark: convert performance call to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20850
diff
changeset
|
59 |
except CalledProcessError, exc: |
25529
3e80691d0dfe
revsetbenchmarks: improve error output in case of failure
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25528
diff
changeset
|
60 |
print >> sys.stderr, 'abort: cannot run revset benchmark: %s' % exc.cmd |
3e80691d0dfe
revsetbenchmarks: improve error output in case of failure
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25528
diff
changeset
|
61 |
if exc.output is None: |
3e80691d0dfe
revsetbenchmarks: improve error output in case of failure
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25528
diff
changeset
|
62 |
print >> sys.stderr, '(no ouput)' |
3e80691d0dfe
revsetbenchmarks: improve error output in case of failure
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25528
diff
changeset
|
63 |
else: |
3e80691d0dfe
revsetbenchmarks: improve error output in case of failure
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25528
diff
changeset
|
64 |
print >> sys.stderr, exc.output |
20851
4130ec938c84
revsetbenchmark: convert performance call to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20850
diff
changeset
|
65 |
sys.exit(exc.returncode) |
4130ec938c84
revsetbenchmark: convert performance call to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20850
diff
changeset
|
66 |
|
25530
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
67 |
outputre = re.compile(r'! wall (\d+.\d+) comb (\d+.\d+) user (\d+.\d+) ' |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
68 |
'sys (\d+.\d+) \(best of (\d+)\)') |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
69 |
|
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
70 |
def parseoutput(output): |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
71 |
"""parse a textual output into a dict |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
72 |
|
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
73 |
We cannot just use json because we want to compare with old |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
74 |
versions of Mercurial that may not support json output. |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
75 |
""" |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
76 |
match = outputre.search(output) |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
77 |
if not match: |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
78 |
print >> sys.stderr, 'abort: invalid output:' |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
79 |
print >> sys.stderr, output |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
80 |
sys.exit(1) |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
81 |
return {'comb': float(match.group(2)), |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
82 |
'count': int(match.group(5)), |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
83 |
'sys': float(match.group(3)), |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
84 |
'user': float(match.group(4)), |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
85 |
'wall': float(match.group(1)), |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
86 |
} |
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
87 |
|
20852
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
88 |
def printrevision(rev): |
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
89 |
"""print data about a revision""" |
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
90 |
sys.stdout.write("Revision: ") |
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
91 |
sys.stdout.flush() |
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
92 |
check_call(['hg', 'log', '--rev', str(rev), '--template', |
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
93 |
'{desc|firstline}\n']) |
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
94 |
|
25531
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
95 |
def printresult(idx, data, maxidx): |
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
96 |
"""print a line of result to stdout""" |
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
97 |
mask = '%i) %s' |
25530
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
98 |
|
25531
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
99 |
out = ("wall %f comb %f user %f sys %f (best of %d)" |
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
100 |
% (data['wall'], data['comb'], data['user'], |
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
101 |
data['sys'], data['count'])) |
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
102 |
|
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
103 |
print mask % (idx, out) |
25530
94efef10b63f
revsetbenchmarks: parse perfrevset output into actual number
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25529
diff
changeset
|
104 |
|
20853
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
105 |
def getrevs(spec): |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
106 |
"""get the list of rev matched by a revset""" |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
107 |
try: |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
108 |
out = check_output(['hg', 'log', '--template={rev}\n', '--rev', spec]) |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
109 |
except CalledProcessError, exc: |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
110 |
print >> sys.stderr, "abort, can't get revision from %s" % spec |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
111 |
sys.exit(exc.returncode) |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
112 |
return [r for r in out.split() if r] |
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
113 |
|
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
114 |
|
21287
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
115 |
parser = OptionParser(usage="usage: %prog [options] <revs>") |
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
116 |
parser.add_option("-f", "--file", |
23139
e53f6b72a0e4
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
22556
diff
changeset
|
117 |
help="read revset from FILE (stdin if omitted)", |
22555
2143d794e960
revsetbenchmark: make it clear that revsets may be read from stdin
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22059
diff
changeset
|
118 |
metavar="FILE") |
21549
ea3d75ebea6d
revsetbenchmark: support for running on other repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21548
diff
changeset
|
119 |
parser.add_option("-R", "--repo", |
ea3d75ebea6d
revsetbenchmark: support for running on other repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21548
diff
changeset
|
120 |
help="run benchmark on REPO", metavar="REPO") |
21287
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
121 |
|
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
122 |
(options, args) = parser.parse_args() |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
123 |
|
21286
f0f810096842
revsetbenchmark: add a usage message when no arguments are passed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21202
diff
changeset
|
124 |
if len(sys.argv) < 2: |
21287
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
125 |
parser.print_help() |
21286
f0f810096842
revsetbenchmark: add a usage message when no arguments are passed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21202
diff
changeset
|
126 |
sys.exit(255) |
f0f810096842
revsetbenchmark: add a usage message when no arguments are passed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21202
diff
changeset
|
127 |
|
21548
651d7548a744
revsetbenchmark: automatically finds the perf extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21287
diff
changeset
|
128 |
# the directory where both this script and the perf.py extension live. |
651d7548a744
revsetbenchmark: automatically finds the perf extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21287
diff
changeset
|
129 |
contribdir = os.path.dirname(__file__) |
21287
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
130 |
|
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
131 |
target_rev = args[0] |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
132 |
|
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
133 |
revsetsfile = sys.stdin |
21287
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
134 |
if options.file: |
2d93b74335a2
revsetbenchmark: use optparse to retrieve argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21286
diff
changeset
|
135 |
revsetsfile = open(options.file) |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
136 |
|
22556
480a24ad9f77
revsetbenchmark: allow comments ('#' prefix) in the revset input
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22555
diff
changeset
|
137 |
revsets = [l.strip() for l in revsetsfile if not l.startswith('#')] |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
138 |
|
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
139 |
print "Revsets to benchmark" |
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
140 |
print "----------------------------" |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
141 |
|
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
142 |
for idx, rset in enumerate(revsets): |
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
143 |
print "%i) %s" % (idx, rset) |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
144 |
|
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
145 |
print "----------------------------" |
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
146 |
|
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
147 |
|
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
148 |
|
20853
95293cf67871
revsetbenchmark: get revision to benchmark in a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20852
diff
changeset
|
149 |
revs = getrevs(target_rev) |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
150 |
|
20855
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
151 |
results = [] |
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
152 |
for r in revs: |
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
153 |
print "----------------------------" |
20852
b2353501d6dc
revsetbenchmark: convert revision display to proper subprocesscall
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20851
diff
changeset
|
154 |
printrevision(r) |
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
155 |
print "----------------------------" |
20850
d0c2535c7aba
revsetbenchmark: convert update to proper subprocess call
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20849
diff
changeset
|
156 |
update(r) |
20855
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
157 |
res = [] |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
158 |
results.append(res) |
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
159 |
for idx, rset in enumerate(revsets): |
21549
ea3d75ebea6d
revsetbenchmark: support for running on other repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
21548
diff
changeset
|
160 |
data = perf(rset, target=options.repo) |
20855
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
161 |
res.append(data) |
25531
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
162 |
printresult(idx, data, len(revsets)) |
20855
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
163 |
sys.stdout.flush() |
20848
11a9393609c8
revsetbenchmark: simplify and convert the script to python
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20847
diff
changeset
|
164 |
print "----------------------------" |
20745
5fb7c36d751f
contrib: added revset performance benchmarking script
Lucas Moscovicz <lmoscovicz@fb.com>
parents:
diff
changeset
|
165 |
|
20855
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
166 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
167 |
print """ |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
168 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
169 |
Result by revset |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
170 |
================ |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
171 |
""" |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
172 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
173 |
print 'Revision:', revs |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
174 |
for idx, rev in enumerate(revs): |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
175 |
sys.stdout.write('%i) ' % idx) |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
176 |
sys.stdout.flush() |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
177 |
printrevision(rev) |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
178 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
179 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
180 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
181 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
182 |
for ridx, rset in enumerate(revsets): |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
183 |
|
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
184 |
print "revset #%i: %s" % (ridx, rset) |
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
185 |
for idx, data in enumerate(results): |
25531
371d8afc9144
revsetbenchmarks: factor out result output into a function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25530
diff
changeset
|
186 |
printresult(idx, data[ridx], len(results)) |
20855
dfad9bb23ab4
revsetbenchmark: add a summary at the end of execution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20854
diff
changeset
|
187 |