From: Jonathan Corbet Date: Wed, 17 Feb 2010 15:39:19 +0000 (-0700) Subject: Put linetags back X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=5fbc435f5b2069fc3a654d890014e3053e20f594;p=people%2Flarsk%2Fxenproject-org-gitdm.git Put linetags back Caffeine-deprived fat-fingering made this script go away. But we want it, so put it back. Signed-off-by: Jonathan Corbet --- diff --git a/linetags b/linetags new file mode 100755 index 0000000..767e399 --- /dev/null +++ b/linetags @@ -0,0 +1,77 @@ +#!/usr/bin/python +# +# Find out how many lines were introduced in each major release. +# +# linetags +# +import sys, re, os, pickle + +CommitLines = { } + +commitpat = re.compile(r'^([\da-f][\da-f]+) ') + +def GetCommitLines(file): + print file + blame = os.popen('git blame -p ' + file, 'r') + for line in blame.readlines(): + m = commitpat.search(line) + # + # All-zero commits mean we got fed a file that git doesn't + # know about. We could throw an exception and abort processing + # now, or we can just silently ignore it... + # + if not m or m.group(1) == '0000000000000000000000000000000000000000': + continue + try: + CommitLines[m.group(1)] += 1 + except KeyError: + CommitLines[m.group(1)] = 1 + blame.close() + +# +# Try to figure out which tag is the first to contain each commit. +# +refpat = re.compile(r'^(v2\.6\.\d\d).*$') +def CommitToTag(commit): + try: + return DB[commit] + except KeyError: + print 'Missing commit %s' % (commit) + return 'WTF?' + +TagLines = { } +def MapCommits(): + print 'Mapping tags...' + for commit in CommitLines.keys(): + tag = CommitToTag(commit) + try: + TagLines[tag] += CommitLines[commit] + except KeyError: + TagLines[tag] = CommitLines[commit] + +# +# Here we just plow through all the files. +# +if len(sys.argv) != 2: + sys.stderr.write('Usage: linetags directory\n') + sys.exit(1) +# +# Grab the tags/version database. +# +dbf = open('committags.db', 'r') +DB = pickle.load(dbf) +dbf.close() + +out = open('linetags.out', 'w') +os.chdir(sys.argv[1]) +files = os.popen('/usr/bin/find . -type f', 'r') +for file in files.readlines(): + if file.find('.git/') < 0: + GetCommitLines(file[:-1]) +MapCommits() +# print TagLines +tags = TagLines.keys() +tags.sort() +for tag in tags: + out.write('%s %d\n' % (tag, TagLines[tag])) +out.close()