diff options
author | Guido van Rossum <guido@python.org> | 1996-07-30 19:05:41 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1996-07-30 19:05:41 (GMT) |
commit | db9c054f6082b9f4d1afd3fb088f808c54c7a71b (patch) | |
tree | 4c0204a4dec733d3df0561e66f548341e9c510f1 | |
parent | ef253701a6e502ce4b54ba9bc8e6c240c00ffd37 (diff) | |
download | cpython-db9c054f6082b9f4d1afd3fb088f808c54c7a71b.zip cpython-db9c054f6082b9f4d1afd3fb088f808c54c7a71b.tar.gz cpython-db9c054f6082b9f4d1afd3fb088f808c54c7a71b.tar.bz2 |
turn a pile of RCS files into a ChangeLog file
-rwxr-xr-x | Demo/pdist/makechangelog.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/Demo/pdist/makechangelog.py b/Demo/pdist/makechangelog.py new file mode 100755 index 0000000..ec7f116 --- /dev/null +++ b/Demo/pdist/makechangelog.py @@ -0,0 +1,109 @@ +#! /usr/local/bin/python + +"""Turn a pile of RCS log output into ChangeLog file entries. + +""" + +import sys +import string +import regex +import getopt +import time + +def main(): + args = sys.argv[1:] + opts, args = getopt.getopt(args, 'p:') + prefix = '' + for o, a in opts: + if p == '-p': prefix = a + + f = sys.stdin + allrevs = [] + while 1: + file = getnextfile(f) + if not file: break + revs = [] + while 1: + rev = getnextrev(f, file) + if not rev: + break + revs.append(rev) + if revs: + allrevs[len(allrevs):] = revs + allrevs.sort() + allrevs.reverse() + for rev in allrevs: + formatrev(rev, prefix) + +parsedateprog = regex.compile( + '^date: \([0-9]+\)/\([0-9]+\)/\([0-9]+\) ' + + '\([0-9]+\):\([0-9]+\):\([0-9]+\); author: \([^ ;]+\)') + +authormap = { + 'guido': 'Guido van Rossum <guido@cnri.reston.va.us>', + 'jack': 'Jack Jansen <jack@cwi.nl>', + 'sjoerd': 'Sjoerd Mullender <sjoerd@cwi.nl>', + } + +def formatrev(rev, prefix): + dateline, file, revline, log = rev + if parsedateprog.match(dateline) >= 0: + fields = parsedateprog.group(1, 2, 3, 4, 5, 6) + author = parsedateprog.group(7) + if authormap.has_key(author): author = authormap[author] + tfields = map(string.atoi, fields) + [0, 0, 0] + tfields[5] = tfields[5] - time.timezone + t = time.mktime(tuple(tfields)) + print time.ctime(t), '', author + words = string.split(log) + words[:0] = ['*', prefix + file + ':'] + maxcol = 72-8 + col = maxcol + for word in words: + if col > 0 and col + len(word) >= maxcol: + print + print '\t' + word, + col = -1 + else: + print word, + col = col + 1 + len(word) + print + print + +startprog = regex.compile("^Working file: \(.*\)$") + +def getnextfile(f): + while 1: + line = f.readline() + if not line: return None + if startprog.match(line) >= 0: + file = startprog.group(1) + # Skip until first revision + while 1: + line = f.readline() + if not line: return None + if line[:10] == '='*10: return None + if line[:10] == '-'*10: break +## print "Skipped", line, + return file +## else: +## print "Ignored", line, + +def getnextrev(f, file): + # This is called when we are positioned just after a '---' separator + revline = f.readline() + dateline = f.readline() + log = '' + while 1: + line = f.readline() + if not line: break + if line[:10] == '='*10: + # Ignore the *last* log entry for each file since it + # is the revision since which we are logging. + return None + if line[:10] == '-'*10: break + log = log + line + return dateline, file, revline, log + +if __name__ == '__main__': + main() |