Merging r261039:
[oota-llvm.git] / utils / git / find-rev
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()