summaryrefslogtreecommitdiff
path: root/obbench
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2015-07-16 18:08:56 +0300
committerLars Wirzenius <liw@liw.fi>2015-07-16 18:08:56 +0300
commit13f8e5f9b54860d84a4236e7e60b676116d5e16c (patch)
tree3e7e99c3aa9786f8d59ed258f29c0be908720911 /obbench
parent052b22a4bc5a07814ecc93a9b40c62e6be55a7e9 (diff)
downloadobnam-benchmarks-13f8e5f9b54860d84a4236e7e60b676116d5e16c.tar.gz
Do not re-run benchmarks
Diffstat (limited to 'obbench')
-rwxr-xr-xobbench35
1 files changed, 29 insertions, 6 deletions
diff --git a/obbench b/obbench
index fa2a905..bee6a20 100755
--- a/obbench
+++ b/obbench
@@ -34,13 +34,15 @@ class ObnamBenchmarker(cliapp.Application):
if not args:
raise cliapp.AppException('Need benchmark spec filename')
spec = self.read_benchmark_spec(args[0])
+ state = self.read_state(spec)
self.logger = IndentedLogger()
tempdir = tempfile.mkdtemp()
for treeish in args[1:]:
self.logger.msg('Benchmarking treeish %s' % treeish)
with self.logger:
- self.run_all_benchmarks(spec, treeish, tempdir)
+ self.run_all_benchmarks(spec, state, treeish, tempdir)
+ self.save_state(spec, state)
self.logger.msg('Generating HTML')
self.generate_html(spec)
@@ -52,12 +54,29 @@ class ObnamBenchmarker(cliapp.Application):
with open(filename) as f:
return yaml.safe_load(f)
- def run_all_benchmarks(self, spec, treeish, tempdir):
+ def read_state(self, spec):
+ try:
+ with open(spec['state']) as f:
+ return yaml.safe_load(f)
+ except EnvironmentError:
+ return { 'commit_id': None }
+
+ def save_state(self, spec, state):
+ with open(spec['state'], 'w') as f:
+ return yaml.safe_dump(state, stream=f)
+
+ def run_all_benchmarks(self, spec, state, treeish, tempdir):
checkout = self.get_treeish(spec, treeish, tempdir)
- self.prepare_obnam(checkout)
- for benchmark in spec.get('benchmarks', []):
- result = self.run_one_benchmark(spec, benchmark, tempdir, checkout)
- self.save_result(spec, benchmark, result)
+ commit_id = self.get_commit_id(checkout)
+ if commit_id == state['commit_id']:
+ self.logger.msg('Already benchmarked')
+ else:
+ self.prepare_obnam(checkout)
+ for benchmark in spec.get('benchmarks', []):
+ result = self.run_one_benchmark(
+ spec, benchmark, tempdir, checkout)
+ self.save_result(spec, benchmark, result)
+ state['commit_id'] = commit_id
def get_treeish(self, spec, treeish, tempdir):
checkout = os.path.join(tempdir, 'git')
@@ -67,6 +86,10 @@ class ObnamBenchmarker(cliapp.Application):
cliapp.runcmd(['git', 'clean', '-fdxq'], cwd=checkout)
return checkout
+ def get_commit_id(self, checkout):
+ output = cliapp.runcmd(['git', 'rev-parse', 'HEAD'], cwd=checkout)
+ return output.strip()
+
def prepare_obnam(self, checkout):
cliapp.runcmd(['python', 'setup.py', 'build_ext', '-i'], cwd=checkout)