199fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar#!/usr/bin/python 299fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 399fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbarimport os, sys, subprocess 499fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 599fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbardef main(): 699fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar from optparse import OptionParser, OptionGroup 799fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar parser = OptionParser("usage: %prog [options] <repo> <revision>") 8f6893dd44daff07245d59d21968f065b6247a9b2Daniel Dunbar parser.add_option("", "--branch", dest="branch", 9f6893dd44daff07245d59d21968f065b6247a9b2Daniel Dunbar help="Ref for the branch to search [%default]", 10f6893dd44daff07245d59d21968f065b6247a9b2Daniel Dunbar action="store", default="git-svn") 1199fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar (opts, args) = parser.parse_args() 1299fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 1399fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar if len(args) != 2: 1499fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar parser.error("invalid number of arguments") 1599fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 1699fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar repo,rev = args 1799fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 1899fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar try: 1999fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar rev = int(rev) 2099fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar except: 2199fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar parser.error("invalid revision argument (not an integer)") 2299fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 2399fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar os.chdir(repo) 24f6893dd44daff07245d59d21968f065b6247a9b2Daniel Dunbar p = subprocess.Popen(['git', 'rev-list', opts.branch, '--pretty'], 2599fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar stdout=subprocess.PIPE) 2699fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 2799fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar bestRev = bestCommit = None 2899fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar lastCommit = None 2999fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar for ln in p.stdout: 3099fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar if ln.startswith('commit '): 3199fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar lastCommit = ln.split(' ',2)[1] 3299fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar elif ln.startswith(' git-svn-id: '): 3399fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar _,repo,_ = ln.strip().split(' ') 3499fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar _,lrev = repo.rsplit('@',1) 3599fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar lrev = int(lrev) 3699fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar if lrev<=rev: 3799fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar if bestRev is None or lrev>bestRev: 3899fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar assert lastCommit 3999fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar bestCommit = lastCommit 4099fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar bestRev = lrev 4199fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar if lrev == rev: 4299fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar break 4399fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 4499fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar if bestCommit is not None: 4599fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar print bestCommit 4699fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar sys.exit(0) 4799fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar sys.exit(1) 4899fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar 4999fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbarif __name__=='__main__': 5099fe6d92d36d1da638e53b8b8403a01b6f0ae9aeDaniel Dunbar main() 51