llvm/utils/git/find-rev
2013-01-17 18:57:21 +00:00

51 lines
1.4 KiB
Python
Executable File

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