1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from __future__ import print_function
from reno import scanner
import yaml
_SECTION_ORDER = [
('features', 'New Features'),
('issues', 'Known Issues'),
('upgrade', 'Upgrade Notes'),
('deprecations', 'Deprecation Notes'),
('critical', 'Critical Issues'),
('security', 'Security Issues'),
('fixes', 'Bug Fixes'),
('other', 'Other Notes'),
]
def _indent_for_list(text, prefix=' '):
"""Indent some text to make it work as a list entry.
Indent all lines except the first with the prefix.
"""
lines = text.splitlines()
return '\n'.join([lines[0]] + [
prefix + l
for l in lines[1:]
]) + '\n'
def format_report(reporoot, scanner_output, versions_to_include, title=None):
report = []
if title:
report.append('=' * len(title))
report.append(title)
report.append('=' * len(title))
report.append('')
# Read all of the notes files.
file_contents = {}
for version in versions_to_include:
for filename, sha in scanner_output[version]:
body = scanner.get_file_at_commit(
reporoot,
filename,
sha,
)
y = yaml.safe_load(body)
file_contents[filename] = y
for version in versions_to_include:
report.append(version)
report.append('=' * len(version))
report.append('')
# Add the preludes.
notefiles = scanner_output[version]
for n, sha in notefiles:
if 'prelude' in file_contents[n]:
report.append(file_contents[n]['prelude'])
report.append('')
for section_name, section_title in _SECTION_ORDER:
notes = [
n
for fn, sha in notefiles
for n in file_contents[fn].get(section_name, [])
]
if notes:
report.append(section_title)
report.append('-' * len(section_title))
report.append('')
for n in notes:
report.append('- %s' % _indent_for_list(n))
report.append('')
return '\n'.join(report)
|