1*9880d681SAndroid Build Coastguard Worker#!/usr/bin/env python 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerimport os 4*9880d681SAndroid Build Coastguard Workerimport sys 5*9880d681SAndroid Build Coastguard Workerimport argparse 6*9880d681SAndroid Build Coastguard Workerimport subprocess 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerparser = argparse.ArgumentParser() 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerparser.add_argument('--start', type=int, default=0) 11*9880d681SAndroid Build Coastguard Workerparser.add_argument('--end', type=int, default=(1 << 32)) 12*9880d681SAndroid Build Coastguard Workerparser.add_argument('command', nargs='+') 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerargs = parser.parse_args() 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerstart = args.start 17*9880d681SAndroid Build Coastguard Workerend = args.end 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerprint("Bisect Starting!") 20*9880d681SAndroid Build Coastguard Workerprint("Start: %d" % start) 21*9880d681SAndroid Build Coastguard Workerprint("End: %d" % end) 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerlast = None 24*9880d681SAndroid Build Coastguard Workerwhile start != end and start != end-1: 25*9880d681SAndroid Build Coastguard Worker count = start + (end - start)/2 26*9880d681SAndroid Build Coastguard Worker print("Visiting Count: %d with (Start, End) = (%d,%d)" % (count, start, end)) 27*9880d681SAndroid Build Coastguard Worker cmd = [x % {'count':count} for x in args.command] 28*9880d681SAndroid Build Coastguard Worker print cmd 29*9880d681SAndroid Build Coastguard Worker result = subprocess.call(cmd) 30*9880d681SAndroid Build Coastguard Worker if result == 0: 31*9880d681SAndroid Build Coastguard Worker print(" PASSES! Setting start to count") 32*9880d681SAndroid Build Coastguard Worker start = count 33*9880d681SAndroid Build Coastguard Worker else: 34*9880d681SAndroid Build Coastguard Worker print(" FAILS! Setting end to count") 35*9880d681SAndroid Build Coastguard Worker end = count 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerprint("Last good count: %d" % start) 38