# HG changeset patch # User Rishabh Madan # Date 1498230953 -7200 # Node ID 5814db57941cd35e6e28014475907afc81b3620b # Parent 8299eb9b08c79699f496717d626842b72fa5ca4f releasenotes: improve parsing around bullet points Earlier, on parsing the bullet points from existing release notes the bullet points after the first one weren't written correctly to the notes file. This patch makes changes to parsereleasenotesfromfile() function that introduces a new bullet_points data structure that tracks the bullets and associated subparagraph. It also makes necessary changes to the tests related to merging of bullets. diff -r 8299eb9b08c7 -r 5814db57941c hgext/releasenotes.py --- 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) diff -r 8299eb9b08c7 -r 5814db57941c tests/test-releasenotes-merging.t --- a/tests/test-releasenotes-merging.t Tue Jun 20 17:18:20 2017 -0700 +++ b/tests/test-releasenotes-merging.t Fri Jun 23 17:15:53 2017 +0200 @@ -34,8 +34,7 @@ * Fix from commit message. -Processing again will no-op -TODO this is buggy +Processing again ignores the already added bullet. $ hg releasenotes -r . $TESTTMP/single-fix-bullet @@ -45,8 +44,6 @@ * Fix from release notes. - Fix from commit message. - * Fix from commit message. $ cd .. @@ -111,7 +108,7 @@ $ cd .. -Bullets don't merge properly +Bullets from rev merge with those from notes file. $ hg init bullets $ cd bullets @@ -157,7 +154,7 @@ * this is fix1. - this is fix2. + * this is fix2. * this is fix3. diff -r 8299eb9b08c7 -r 5814db57941c tests/test-releasenotes-parsing.t --- a/tests/test-releasenotes-parsing.t Tue Jun 20 17:18:20 2017 -0700 +++ b/tests/test-releasenotes-parsing.t Fri Jun 23 17:15:53 2017 +0200 @@ -59,7 +59,9 @@ section: feature bullet point: paragraph: First bullet point. It has a single line. + bullet point: paragraph: Second bullet point. It consists of multiple lines. + bullet point: paragraph: Third bullet point. It has a single line. Bullet point without newline between items @@ -77,8 +79,11 @@ section: feature bullet point: paragraph: First bullet point + bullet point: paragraph: Second bullet point And it has multiple lines + bullet point: paragraph: Third bullet point + bullet point: paragraph: Fourth bullet point Sub-section contents are read @@ -130,10 +135,12 @@ section: feature bullet point: paragraph: Feature 1 + bullet point: paragraph: Feature 2 section: fix bullet point: paragraph: Fix 1 + bullet point: paragraph: Fix 2 Mixed sub-sections and bullet list @@ -166,4 +173,5 @@ paragraph: Some words about the second feature. That span multiple lines. bullet point: paragraph: Bullet item 1 + bullet point: paragraph: Bullet item 2