From 13f8e5f9b54860d84a4236e7e60b676116d5e16c Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 16 Jul 2015 18:08:56 +0300 Subject: Do not re-run benchmarks --- obbench | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'obbench') 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) -- cgit v1.2.1