118 lines
4.1 KiB
Python
118 lines
4.1 KiB
Python
# 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.
|
|
|
|
|
|
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 _anchor(version_title, title, branch):
|
|
title = title or 'relnotes'
|
|
return '.. _{title}_{version_title}{branch}:'.format(
|
|
title=title,
|
|
version_title=version_title,
|
|
branch=('_' + branch.replace('/', '_') if branch else ''),
|
|
)
|
|
|
|
|
|
def _section_anchor(section_title, version_title, title, branch):
|
|
# Get the title and remove the trailing :
|
|
title = _anchor(version_title, title, branch)[:-1]
|
|
return "{title}_{section_title}:".format(
|
|
title=title,
|
|
section_title=section_title,
|
|
)
|
|
|
|
|
|
def format_report(loader, config, versions_to_include, title=None,
|
|
show_source=True, branch=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 loader[version]:
|
|
body = loader.parse_note_file(filename, sha)
|
|
file_contents[filename] = body
|
|
|
|
for version in versions_to_include:
|
|
if '-' in version:
|
|
# This looks like an "unreleased version".
|
|
version_title = config.unreleased_version_title or version
|
|
else:
|
|
version_title = version
|
|
report.append(_anchor(version_title, title, branch))
|
|
report.append('')
|
|
report.append(version_title)
|
|
report.append('=' * len(version_title))
|
|
report.append('')
|
|
|
|
if config.add_release_date:
|
|
report.append('Release Date: ' + loader.get_version_date(version))
|
|
report.append('')
|
|
|
|
# Add the preludes.
|
|
notefiles = loader[version]
|
|
prelude_name = config.prelude_section_name
|
|
notefiles_with_prelude = [(n, sha) for n, sha in notefiles
|
|
if prelude_name in file_contents[n]]
|
|
if notefiles_with_prelude:
|
|
prelude_title = prelude_name.replace('_', ' ').title()
|
|
report.append(_section_anchor(
|
|
prelude_title, version_title, title, branch))
|
|
report.append('')
|
|
report.append(prelude_title)
|
|
report.append('-' * len(prelude_name))
|
|
report.append('')
|
|
|
|
for n, sha in notefiles_with_prelude:
|
|
if show_source:
|
|
report.append('.. %s @ %s\n' % (n, sha))
|
|
report.append(file_contents[n][prelude_name])
|
|
report.append('')
|
|
|
|
# Add other sections.
|
|
for section in config.sections:
|
|
notes = [
|
|
(n, fn, sha)
|
|
for fn, sha in notefiles
|
|
if file_contents[fn].get(section.name)
|
|
for n in file_contents[fn].get(section.name, [])
|
|
]
|
|
if notes:
|
|
report.append(_section_anchor(
|
|
section.title, version_title, title, branch))
|
|
report.append('')
|
|
report.append(section.title)
|
|
report.append(section.header_underline())
|
|
report.append('')
|
|
for n, fn, sha in notes:
|
|
if show_source:
|
|
report.append('.. %s @ %s\n' % (fn, sha))
|
|
report.append('- %s' % _indent_for_list(n))
|
|
report.append('')
|
|
|
|
return '\n'.join(report)
|