Переглянути джерело

Add collation/splitting support to sortChanges script

Nick Mathewson 9 роки тому
батько
коміт
e81951c489
1 змінених файлів з 40 додано та 7 видалено
  1. 40 7
      scripts/maint/sortChanges.py

+ 40 - 7
scripts/maint/sortChanges.py

@@ -5,8 +5,6 @@
 """This script sorts a bunch of changes files listed on its command
 """This script sorts a bunch of changes files listed on its command
    line into roughly the order in which they should appear in the
    line into roughly the order in which they should appear in the
    changelog.
    changelog.
-
-   TODO: collation support.
 """
 """
 
 
 import re
 import re
@@ -19,7 +17,7 @@ def fetch(fn):
         return s
         return s
 
 
 def score(s,fname=None):
 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:
     if not m:
         print >>sys.stderr, "Can't score %r from %s"%(s,fname)
         print >>sys.stderr, "Can't score %r from %s"%(s,fname)
     lw = m.group(1).lower()
     lw = m.group(1).lower()
@@ -38,12 +36,47 @@ def score(s,fname=None):
     else:
     else:
         score = 100
         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()
 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