hgext/releasenotes.py
changeset 33012 5814db57941c
parent 32778 91e355a0408b
child 33571 9a944e908ecf
--- a/hgext/releasenotes.py	Tue Jun 20 17:18:20 2017 -0700
+++ b/hgext/releasenotes.py	Fri Jun 23 17:15:53 2017 +0200
@@ -185,8 +185,8 @@
 
     blocks = minirst.parse(text)[0]
 
-    def gatherparagraphs(offset):
-        paragraphs = []
+    def gatherparagraphsbullets(offset, title=False):
+        notefragment = []
 
         for i in range(offset + 1, len(blocks)):
             block = blocks[i]
@@ -198,17 +198,27 @@
             elif block['type'] == 'bullet':
                 if block['indent'] != 0:
                     raise error.Abort(_('indented bullet lists not supported'))
+                if title:
+                    lines = [l[1:].strip() for l in block['lines']]
+                    notefragment.append(lines)
+                    continue
+                else:
+                    lines = [[l[1:].strip() for l in block['lines']]]
 
-                lines = [l[1:].strip() for l in block['lines']]
-                paragraphs.append(lines)
-                continue
+                    for block in blocks[i + 1:]:
+                        if block['type'] in ('bullet', 'section'):
+                            break
+                        if block['type'] == 'paragraph':
+                            lines.append(block['lines'])
+                    notefragment.append(lines)
+                    continue
             elif block['type'] != 'paragraph':
                 raise error.Abort(_('unexpected block type in release notes: '
                                     '%s') % block['type'])
+            if title:
+                notefragment.append(block['lines'])
 
-            paragraphs.append(block['lines'])
-
-        return paragraphs
+        return notefragment
 
     currentsection = None
     for i, block in enumerate(blocks):
@@ -226,16 +236,18 @@
                                   title)
 
             currentsection = name
-            paragraphs = gatherparagraphs(i)
-            if paragraphs:
-                notes.addnontitleditem(currentsection, paragraphs)
+            bullet_points = gatherparagraphsbullets(i)
+            if bullet_points:
+                for para in bullet_points:
+                    notes.addnontitleditem(currentsection, para)
 
         elif block['underline'] == '-':  # sub-section
-            paragraphs = gatherparagraphs(i)
-
             if title == BULLET_SECTION:
-                notes.addnontitleditem(currentsection, paragraphs)
+                bullet_points = gatherparagraphsbullets(i)
+                for para in bullet_points:
+                    notes.addnontitleditem(currentsection, para)
             else:
+                paragraphs = gatherparagraphsbullets(i, True)
                 notes.addtitleditem(currentsection, title, paragraphs)
         else:
             raise error.Abort(_('unsupported section type for %s') % title)