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