Split CHANGELOG into preface + ordered list of version blocks.
(text: str)
| 84 | |
| 85 | |
| 86 | def parse_changelog(text: str): |
| 87 | """Split CHANGELOG into preface + ordered list of version blocks.""" |
| 88 | lines = text.split("\n") |
| 89 | preface: list[str] = [] |
| 90 | blocks: list[dict] = [] |
| 91 | cur: dict | None = None |
| 92 | for line in lines: |
| 93 | m = VERSION_HEADER_RE.match(line) |
| 94 | if m: |
| 95 | if cur: |
| 96 | blocks.append(cur) |
| 97 | cur = { |
| 98 | "header": line, |
| 99 | "name": m.group(1), |
| 100 | "date": m.group(2), |
| 101 | "body": [], |
| 102 | } |
| 103 | elif cur is not None: |
| 104 | cur["body"].append(line) |
| 105 | else: |
| 106 | preface.append(line) |
| 107 | if cur: |
| 108 | blocks.append(cur) |
| 109 | return preface, blocks |
| 110 | |
| 111 | |
| 112 | def join_changelog(preface: list[str], blocks: list[dict]) -> str: |