| #!/usr/bin/python | 
 |  | 
 | import os, sys, subprocess | 
 |  | 
 | def main(): | 
 |     from optparse import OptionParser, OptionGroup | 
 |     parser = OptionParser("usage: %prog [options] <repo> <revision>") | 
 |     parser.add_option("", "--branch", dest="branch", | 
 |                       help="Ref for the branch to search [%default]", | 
 |                       action="store", default="git-svn")     | 
 |     (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', opts.branch, '--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() |