-#!/usr/bin/env python
+#!/usr/bin/env python3
# use git bisect to work out what commit caused a test failure
# Copyright Andrew Tridgell 2010
# released under GNU GPL v3 or later
from subprocess import call, check_call, Popen, PIPE
-import os, tempfile, sys
+import os
+import tempfile
+import sys
from optparse import OptionParser
parser = OptionParser()
parser.add_option("", "--bad", help="known bad revision (default HEAD)", default='HEAD')
parser.add_option("", "--skip-build-errors", help="skip revision where make fails",
action='store_true', default=False)
-parser.add_option("", "--autogen", help="run autogen before each build",action="store_true", default=False)
+parser.add_option("", "--autogen", help="run autogen before each build", action="store_true", default=False)
parser.add_option("", "--autogen-command", help="command to use for autogen (default ./autogen.sh)",
type='str', default="./autogen.sh")
parser.add_option("", "--configure", help="run configure.developer before each build",
else:
return call(cmd, shell=True, cwd=dir)
+
def find_git_root():
'''get to the top of the git repo'''
- p=os.getcwd()
+ p = os.getcwd()
while p != '/':
if os.path.isdir(os.path.join(p, ".git")):
return p
p = os.path.abspath(os.path.join(p, '..'))
return None
+
cwd = os.getcwd()
gitroot = find_git_root()
# create a bisect script
-f = tempfile.NamedTemporaryFile(delete=False)
+f = tempfile.NamedTemporaryFile(delete=False, mode="w+t")
f.write("set -x\n")
f.write("cd %s || exit 125\n" % cwd)
if opts.autogen:
f.write("exit 0\n")
f.close()
+
def cleanup():
run_cmd("git bisect reset", dir=gitroot)
os.unlink(f.name)
sys.exit(-1)
+
# run bisect
ret = -1
try: