summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-05-05 11:24:01 -0400
committerNick Mathewson <nickm@torproject.org>2015-05-05 11:24:01 -0400
commite81951c48949c83d6d3b618c95f128a8f41aff43 (patch)
tree88ba46cea93ad2c2d06c766e096f48ff45dd4f12
parentf61088ce2321be7c408b4298258a268a0a546e78 (diff)
downloadtor-e81951c48949c83d6d3b618c95f128a8f41aff43.tar.gz
tor-e81951c48949c83d6d3b618c95f128a8f41aff43.zip
Add collation/splitting support to sortChanges script
-rwxr-xr-xscripts/maint/sortChanges.py47
1 files changed, 40 insertions, 7 deletions
diff --git a/scripts/maint/sortChanges.py b/scripts/maint/sortChanges.py
index ad28c79d9d..7e25cefd53 100755
--- a/scripts/maint/sortChanges.py
+++ b/scripts/maint/sortChanges.py
@@ -5,8 +5,6 @@
"""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.
-
- TODO: collation support.
"""
import re
@@ -19,7 +17,7 @@ def fetch(fn):
return s
def score(s,fname=None):
- m = re.match(r'^ +o (.*)', s)
+ m = re.match(r'^ +o ([^\n]*)\n(.*)', s, re.M|re.S)
if not m:
print >>sys.stderr, "Can't score %r from %s"%(s,fname)
lw = m.group(1).lower()
@@ -38,12 +36,47 @@ def score(s,fname=None):
else:
score = 100
- return (score, lw, s)
+ 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 = [ score(fetch(fn),fn) for fn in sys.argv[1:] if not fn.endswith('~') ]
+
+changes = []
+
+for fn in sys.argv[1:]:
+ if fn.endswith('~'):
+ continue
+ for change in splitChanges(fetch(fn)):
+ changes.append(score(change,fn))
changes.sort()
-for _, _, s in changes:
- print s
+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