diff options
author | Jonathan Corbet <corbet@lwn.net> | 2010-02-17 08:39:19 -0700 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2010-02-17 08:39:19 -0700 |
commit | 5fbc435f5b2069fc3a654d890014e3053e20f594 (patch) | |
tree | 48752d857210a1cb0dd1570242201d91e097f9b5 | |
parent | 68e82f808540ad733327c5653a98859de34843b9 (diff) |
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 <corbet@lwn.net>
-rwxr-xr-x | linetags | 77 |
1 files changed, 77 insertions, 0 deletions
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 <directory> +# +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() |