blob: 059ca0b78de84189ae575cd6f92b560c2001c5f5 [file] [log] [blame]
Daniel Dunbar99fe6d92010-02-25 18:07:07 +00001#!/usr/bin/python
2
3import os, sys, subprocess
4
5def main():
6 from optparse import OptionParser, OptionGroup
7 parser = OptionParser("usage: %prog [options] <repo> <revision>")
Daniel Dunbarf6893dd2013-01-17 18:57:21 +00008 parser.add_option("", "--branch", dest="branch",
9 help="Ref for the branch to search [%default]",
10 action="store", default="git-svn")
Daniel Dunbar99fe6d92010-02-25 18:07:07 +000011 (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)
Daniel Dunbarf6893dd2013-01-17 18:57:21 +000024 p = subprocess.Popen(['git', 'rev-list', opts.branch, '--pretty'],
Daniel Dunbar99fe6d92010-02-25 18:07:07 +000025 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
49if __name__=='__main__':
50 main()