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