{#- macro: render_commit -#} {%- macro render_commit(commit) -%} - {{ commit.convention.subject|default(commit.subject) }} ([{{ commit.hash|truncate(7, True, '') }}]({{ commit.url }}) by {{ commit.author_name }}). {%- if commit.text_refs.issues_not_in_subject %} Related issues/PRs: {% for issue in commit.text_refs.issues_not_in_subject -%} {% if issue.url %}[{{ issue.ref }}]({{ issue.url }}){% else %}{{ issue.ref }}{% endif %}{% if not loop.last %}, {% endif -%} {%- endfor -%}{%- endif -%} {%- for trailer_name, trailer_value in commit.trailers.items() -%} {%- if trailer_value|is_url %} [{{ trailer_name }}]({{ trailer_value }}) {%- else %} {{ trailer_name }}: {{ trailer_value }}{% endif %} {%- if not loop.last %},{% endif %} {%- endfor -%} {%- endmacro -%} {#- macro: render_section -#} {%- macro render_section(section) -%} ### {{ section.type or "Misc" }} {% for commit in section.commits|sort(attribute='author_date',reverse=true)|unique(attribute='subject') -%} {{ render_commit(commit) }} {% endfor %} {%- endmacro -%} {#- macro: render_version -#} {%- macro render_version(version) -%} {%- if version.tag or version.planned_tag -%} ## [{{ version.tag or version.planned_tag }}]{% if version.date %} - {{ version.date }}{% endif %} [Compare with {{ version.previous_version.tag|default("first commit") }}]({{ version.compare_url }}) {%- else -%} ## Unreleased [Compare with latest]({{ version.compare_url }}) {%- endif %} {% for type in changelog.sections %} {%- if type in version.sections_dict %} {%- with section = version.sections_dict[type] %} {{ render_section(section) }} {%- endwith %} {%- endif %} {%- endfor %} {%- if not (version.tag or version.planned_tag) %} {% endif %} {% endmacro -%} {#- template -#} {%- if not in_place -%} # Changelog {% endif %} {% for version in changelog.versions_list -%} {{ render_version(version) }} {%- endfor -%}