|  | #!/usr/bin/python | 
|  |  | 
|  | import os, sys, subprocess | 
|  |  | 
|  | def main(): | 
|  | from optparse import OptionParser, OptionGroup | 
|  | parser = OptionParser("usage: %prog [options] <repo> <revision>") | 
|  | parser.add_option("", "--dump-section-data", dest="dumpSectionData", | 
|  | help="Dump the contents of sections", | 
|  | action="store_true", default=False) | 
|  | (opts, args) = parser.parse_args() | 
|  |  | 
|  | if len(args) != 2: | 
|  | parser.error("invalid number of arguments") | 
|  |  | 
|  | repo,rev = args | 
|  |  | 
|  | try: | 
|  | rev = int(rev) | 
|  | except: | 
|  | parser.error("invalid revision argument (not an integer)") | 
|  |  | 
|  | os.chdir(repo) | 
|  | p = subprocess.Popen(['git', 'rev-list', 'git-svn', '--pretty'], | 
|  | stdout=subprocess.PIPE) | 
|  |  | 
|  | bestRev = bestCommit = None | 
|  | lastCommit = None | 
|  | for ln in p.stdout: | 
|  | if ln.startswith('commit '): | 
|  | lastCommit = ln.split(' ',2)[1] | 
|  | elif ln.startswith('    git-svn-id: '): | 
|  | _,repo,_ = ln.strip().split(' ') | 
|  | _,lrev = repo.rsplit('@',1) | 
|  | lrev = int(lrev) | 
|  | if lrev<=rev: | 
|  | if bestRev is None or lrev>bestRev: | 
|  | assert lastCommit | 
|  | bestCommit = lastCommit | 
|  | bestRev = lrev | 
|  | if lrev == rev: | 
|  | break | 
|  |  | 
|  | if bestCommit is not None: | 
|  | print bestCommit | 
|  | sys.exit(0) | 
|  | sys.exit(1) | 
|  |  | 
|  | if __name__=='__main__': | 
|  | main() |