зеркало из https://github.com/mozilla/gecko-dev.git
73 строки
2.0 KiB
Python
73 строки
2.0 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
import getopt
|
||
|
import subprocess
|
||
|
import sys
|
||
|
|
||
|
LONG_OPTIONS = ["shard=", "shards="]
|
||
|
BASE_COMMAND = "./configure --enable-internal-stats --enable-experimental"
|
||
|
|
||
|
def RunCommand(command):
|
||
|
run = subprocess.Popen(command, shell=True)
|
||
|
output = run.communicate()
|
||
|
if run.returncode:
|
||
|
print "Non-zero return code: " + str(run.returncode) + " => exiting!"
|
||
|
sys.exit(1)
|
||
|
|
||
|
def list_of_experiments():
|
||
|
experiments = []
|
||
|
configure_file = open("configure")
|
||
|
list_start = False
|
||
|
for line in configure_file.read().split("\n"):
|
||
|
if line == 'EXPERIMENT_LIST="':
|
||
|
list_start = True
|
||
|
elif line == '"':
|
||
|
list_start = False
|
||
|
elif list_start:
|
||
|
currently_broken = ["csm"]
|
||
|
experiment = line[4:]
|
||
|
if experiment not in currently_broken:
|
||
|
experiments.append(experiment)
|
||
|
return experiments
|
||
|
|
||
|
def main(argv):
|
||
|
# Parse arguments
|
||
|
options = {"--shard": 0, "--shards": 1}
|
||
|
if "--" in argv:
|
||
|
opt_end_index = argv.index("--")
|
||
|
else:
|
||
|
opt_end_index = len(argv)
|
||
|
try:
|
||
|
o, _ = getopt.getopt(argv[1:opt_end_index], None, LONG_OPTIONS)
|
||
|
except getopt.GetoptError, err:
|
||
|
print str(err)
|
||
|
print "Usage: %s [--shard=<n> --shards=<n>] -- [configure flag ...]"%argv[0]
|
||
|
sys.exit(2)
|
||
|
|
||
|
options.update(o)
|
||
|
extra_args = argv[opt_end_index + 1:]
|
||
|
|
||
|
# Shard experiment list
|
||
|
shard = int(options["--shard"])
|
||
|
shards = int(options["--shards"])
|
||
|
experiments = list_of_experiments()
|
||
|
base_command = " ".join([BASE_COMMAND] + extra_args)
|
||
|
configs = [base_command]
|
||
|
configs += ["%s --enable-%s" % (base_command, e) for e in experiments]
|
||
|
my_configs = zip(configs, range(len(configs)))
|
||
|
my_configs = filter(lambda x: x[1] % shards == shard, my_configs)
|
||
|
my_configs = [e[0] for e in my_configs]
|
||
|
|
||
|
# Run configs for this shard
|
||
|
for config in my_configs:
|
||
|
test_build(config)
|
||
|
|
||
|
def test_build(configure_command):
|
||
|
print "\033[34m\033[47mTesting %s\033[0m" % (configure_command)
|
||
|
RunCommand(configure_command)
|
||
|
RunCommand("make clean")
|
||
|
RunCommand("make")
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main(sys.argv)
|