Home | History | Annotate | Download | only in git
      1 #!/usr/bin/python
      2 
      3 import os, sys, subprocess
      4 
      5 def main():
      6     from optparse import OptionParser, OptionGroup
      7     parser = OptionParser("usage: %prog [options] <repo> <revision>")
      8     parser.add_option("", "--branch", dest="branch",
      9                       help="Ref for the branch to search [%default]",
     10                       action="store", default="git-svn")    
     11     (opts, args) = parser.parse_args()
     12 
     13     if len(args) != 2:
     14         parser.error("invalid number of arguments")
     15 
     16     repo,rev = args
     17 
     18     try:
     19         rev = int(rev)
     20     except:
     21         parser.error("invalid revision argument (not an integer)")
     22 
     23     os.chdir(repo)
     24     p = subprocess.Popen(['git', 'rev-list', opts.branch, '--pretty'],
     25                          stdout=subprocess.PIPE)
     26 
     27     bestRev = bestCommit = None
     28     lastCommit = None
     29     for ln in p.stdout:
     30         if ln.startswith('commit '):
     31             lastCommit = ln.split(' ',2)[1]
     32         elif ln.startswith('    git-svn-id: '):
     33             _,repo,_ = ln.strip().split(' ')
     34             _,lrev = repo.rsplit('@',1)
     35             lrev = int(lrev)
     36             if lrev<=rev:
     37                 if bestRev is None or lrev>bestRev:
     38                     assert lastCommit
     39                     bestCommit = lastCommit
     40                     bestRev = lrev
     41                     if lrev == rev:
     42                         break
     43     
     44     if bestCommit is not None:
     45         print bestCommit
     46         sys.exit(0)
     47     sys.exit(1)
     48 
     49 if __name__=='__main__':
     50     main()
     51