1*9880d681SAndroid Build Coastguard Worker#!/usr/bin/python 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerimport os, sys, subprocess 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdef main(): 6*9880d681SAndroid Build Coastguard Worker from optparse import OptionParser, OptionGroup 7*9880d681SAndroid Build Coastguard Worker parser = OptionParser("usage: %prog [options] <repo> <revision>") 8*9880d681SAndroid Build Coastguard Worker parser.add_option("", "--branch", dest="branch", 9*9880d681SAndroid Build Coastguard Worker help="Ref for the branch to search [%default]", 10*9880d681SAndroid Build Coastguard Worker action="store", default="git-svn") 11*9880d681SAndroid Build Coastguard Worker (opts, args) = parser.parse_args() 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker if len(args) != 2: 14*9880d681SAndroid Build Coastguard Worker parser.error("invalid number of arguments") 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker repo,rev = args 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker try: 19*9880d681SAndroid Build Coastguard Worker rev = int(rev) 20*9880d681SAndroid Build Coastguard Worker except: 21*9880d681SAndroid Build Coastguard Worker parser.error("invalid revision argument (not an integer)") 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker os.chdir(repo) 24*9880d681SAndroid Build Coastguard Worker p = subprocess.Popen(['git', 'rev-list', opts.branch, '--pretty'], 25*9880d681SAndroid Build Coastguard Worker stdout=subprocess.PIPE) 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker bestRev = bestCommit = None 28*9880d681SAndroid Build Coastguard Worker lastCommit = None 29*9880d681SAndroid Build Coastguard Worker for ln in p.stdout: 30*9880d681SAndroid Build Coastguard Worker if ln.startswith('commit '): 31*9880d681SAndroid Build Coastguard Worker lastCommit = ln.split(' ',2)[1] 32*9880d681SAndroid Build Coastguard Worker elif ln.startswith(' git-svn-id: '): 33*9880d681SAndroid Build Coastguard Worker _,repo,_ = ln.strip().split(' ') 34*9880d681SAndroid Build Coastguard Worker _,lrev = repo.rsplit('@',1) 35*9880d681SAndroid Build Coastguard Worker lrev = int(lrev) 36*9880d681SAndroid Build Coastguard Worker if lrev<=rev: 37*9880d681SAndroid Build Coastguard Worker if bestRev is None or lrev>bestRev: 38*9880d681SAndroid Build Coastguard Worker assert lastCommit 39*9880d681SAndroid Build Coastguard Worker bestCommit = lastCommit 40*9880d681SAndroid Build Coastguard Worker bestRev = lrev 41*9880d681SAndroid Build Coastguard Worker if lrev == rev: 42*9880d681SAndroid Build Coastguard Worker break 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker if bestCommit is not None: 45*9880d681SAndroid Build Coastguard Worker print bestCommit 46*9880d681SAndroid Build Coastguard Worker sys.exit(0) 47*9880d681SAndroid Build Coastguard Worker sys.exit(1) 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerif __name__=='__main__': 50*9880d681SAndroid Build Coastguard Worker main() 51