48 lines
1.2 KiB
Python
Executable file
48 lines
1.2 KiB
Python
Executable file
#!/usr/bin/python2
|
|
|
|
from multiprocessing import Pool
|
|
import subprocess
|
|
import tempfile
|
|
|
|
|
|
def explode_ref(ref, dest):
|
|
"""Write contents from ref to dest dir"""
|
|
p1 = subprocess.Popen(['git', 'archive', ref], stdout=subprocess.PIPE)
|
|
p2 = subprocess.Popen(['tar', '-x'], cwd=dest, stdin=p1.stdout)
|
|
p1.stdout.close()
|
|
p2.communicate()
|
|
|
|
|
|
def checkout_run(cmd, ref='HEAD'):
|
|
"""Run command in a fresh checkout of ref and return output"""
|
|
tempdir = tempfile.mkdtemp()
|
|
explode_ref(ref, tempdir)
|
|
try:
|
|
output = subprocess.check_output(cmd, cwd=tempdir,
|
|
stderr=subprocess.STDOUT)
|
|
except subprocess.CalledProcessError as e:
|
|
print("Command failed with code %s" % e.returncode)
|
|
output = e.output
|
|
return output
|
|
|
|
|
|
def run_test():
|
|
return checkout_run(['make', 'test'])
|
|
|
|
|
|
def run_test3():
|
|
return checkout_run(['make', 'test3'])
|
|
|
|
|
|
def main():
|
|
"""Run our test targets in parallel using fresh checkouts of HEAD"""
|
|
print("Running tests...")
|
|
p = Pool(2)
|
|
results = [p.apply_async(f) for f in [run_test, run_test3]]
|
|
for r in results:
|
|
print(r.get().decode('utf-8'))
|
|
p.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|