From fcc47fa5f14c715a3cab6da35b0dbbb61eba828b Mon Sep 17 00:00:00 2001 From: krad Date: Thu, 9 Jun 2016 18:51:56 -0700 Subject: [PATCH] New features to precommit check script Summary: Added new features to help run the entire suite of tests on a diff locally leveraging parallelism Test Plan: Basic command line test Subscribers: andrewkr, dhruba, leveldb Differential Revision: https://reviews.facebook.net/D59445 --- build_tools/precommit_checker.py | 44 ++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/build_tools/precommit_checker.py b/build_tools/precommit_checker.py index e47554772..5e128e38f 100755 --- a/build_tools/precommit_checker.py +++ b/build_tools/precommit_checker.py @@ -12,17 +12,15 @@ import re import os import time + # # Simple logger # - class Log: - LOG_FILE = "/tmp/precommit-check.log" - - def __init__(self): - self.filename = Log.LOG_FILE + def __init__(self, filename): + self.filename = filename self.f = open(self.filename, 'w+', 0) def caption(self, str): @@ -52,9 +50,9 @@ class Log: class Env(object): - def __init__(self, tests): + def __init__(self, logfile, tests): self.tests = tests - self.log = Log() + self.log = Log(logfile) def shell(self, cmd, path=os.getcwd()): if path: @@ -87,8 +85,9 @@ class Env(object): class PreCommitChecker(Env): - def __init__(self, tests): - Env.__init__(self, tests) + def __init__(self, args): + Env.__init__(self, args.logfile, args.tests) + self.stop_on_fail = args.stop_on_fail # # Get commands for a given job from the determinator file @@ -144,6 +143,7 @@ class PreCommitChecker(Env): self.print_row("TEST", "RESULT") self.print_separator() + result = True for test in self.tests: start_time = time.time() self.print_test(test) @@ -152,11 +152,14 @@ class PreCommitChecker(Env): if not result: self.log.error("Error running test %s" % test) self.print_result("FAIL (%dm)" % elapsed_min) - return False - self.print_result("PASS (%dm)" % elapsed_min) + if self.stop_on_fail: + return False + result = False + else: + self.print_result("PASS (%dm)" % elapsed_min) self.print_separator() - return True + return result # # Print a line @@ -182,17 +185,24 @@ class PreCommitChecker(Env): # parser = argparse.ArgumentParser(description='RocksDB pre-commit checker.') +# --log +parser.add_argument('--logfile', default='/tmp/precommit,log', + help='Log file. Default is /tmp/precommit.log') +# --stop_on_fail +parser.add_argument('--stop_on_fail', action='store_false', default=True, + help='Stop when an error occurs') # -parser.add_argument('test', nargs='+', +parser.add_argument('tests', nargs='+', help='CI test(s) to run. e.g: unit punit asan tsan ubsan') -print("Please follow log %s" % Log.LOG_FILE) - args = parser.parse_args() -checker = PreCommitChecker(args.test) +checker = PreCommitChecker(args) + +print("Please follow log %s" % checker.log.filename) if not checker.run_tests(): - print("Error running tests. Please check log file %s" % Log.LOG_FILE) + print("Error running tests. Please check log file %s" + % checker.log.filename) sys.exit(1) sys.exit(0)