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