tor/scripts/maint/sortChanges.py

83 lines
1.9 KiB
Python
Raw Normal View History

#!/usr/bin/python
# Copyright (c) 2014-2015, The Tor Project, Inc.
# See LICENSE for licensing information
"""This script sorts a bunch of changes files listed on its command
line into roughly the order in which they should appear in the
changelog.
"""
import re
import sys
def fetch(fn):
with open(fn) as f:
s = f.read()
s = "%s\n" % s.rstrip()
return s
2014-12-22 16:00:34 +01:00
def score(s,fname=None):
m = re.match(r'^ +o ([^\n]*)\n(.*)', s, re.M|re.S)
if not m:
2014-12-22 16:00:34 +01:00
print >>sys.stderr, "Can't score %r from %s"%(s,fname)
lw = m.group(1).lower()
if lw.startswith("major feature"):
score = 0
elif lw.startswith("major bug"):
score = 1
elif lw.startswith("major"):
score = 2
elif lw.startswith("minor feature"):
score = 10
elif lw.startswith("minor bug"):
score = 11
elif lw.startswith("minor"):
score = 12
else:
score = 100
return (score, lw, m.group(1), m.group(2))
def splitChanges(s):
this_entry = []
for line in s.split("\n"):
if line.strip() == "":
continue
if re.match(r" +o ", line):
if len(this_entry) > 2:
yield "".join(this_entry)
curHeader = line
this_entry = [ curHeader, "\n" ]
continue
elif re.match(r" +- ", line):
if len(this_entry) > 2:
yield "".join(this_entry)
this_entry = [ curHeader, "\n" ]
this_entry.append(line)
this_entry.append("\n")
if len(this_entry) > 2:
yield "".join(this_entry)
changes = []
for fn in sys.argv[1:]:
if fn.endswith('~'):
continue
for change in splitChanges(fetch(fn)):
changes.append(score(change,fn))
changes.sort()
last_lw = "this is not a header"
for _, lw, header, rest in changes:
if lw == last_lw:
print rest,
else:
print
print " o",header
print rest,
last_lw = lw