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
main
krad 9 years ago
parent 56887f6cb8
commit fcc47fa5f1
  1. 44
      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 <logfile>
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')
# <test ....>
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)

Loading…
Cancel
Save