| #!/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() |