mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 01:07:18 +03:00
0798fe155b
changelog_begin changelog_end Adds a small separator between changelog entries for separate commits to improve readability. Adds a "title" to each changelog entry to provide context to the reader to ensure that the changelog entry can be traced back to a commit. The title line is composed of the commit subject (which usually includes the PR number), author and hash. This set of information should help the reader trace back a changelog entry to a commit/PR to improve the understanding of the contribution in case the changelog entry is difficult to understand without proper context. As an example, given the following command: ``` ./unreleased.sh v2.2.0-snapshot.20220425.9780.0.f4d60375..v2.2.0-snapshot.20220504.9851.0.4c8e027d ``` here is the difference for the first few lines of output. Before: ``` Fixing Ledger API Bug: Exercise nodes in transaction trees have child_event_ids out of order. - [HTTP-JSON] The field "@type" was renamed to "type" for encoding the ErrorDetails case - [Daml Triggers] Add `queryFilter` matching Daml Script’s `queryFilter` which queries contracts of a given template and filters them down to those where the predicate holds. ``` After: ``` * Fix random exercise node's childEventId order [DPP-1018] (#13740) (committer: Marton Nagy | hash:0ea140f51e
) Fixing Ledger API Bug: Exercise nodes in transaction trees have child_event_ids out of order. ---------------- * Use deriveFormat for ErrorDetailsFormat instead of hand written JsonFormat (#13770) (committer: Victor Peter Rouven Müller | hash:3decea2a95
) - [HTTP-JSON] The field "@type" was renamed to "type" for encoding the ErrorDetails case ---------------- * Updating Titles and Headings (#13592) (committer: carrielaben-da | hash:58c615a251
) ---------------- * Add queryFilter to triggers (#13769) (committer: Moritz Kiefer | hash:d3280ac87d
) - [Daml Triggers] Add `queryFilter` matching Daml Script’s `queryFilter` which queries contracts of a given template and filters them down to those where the predicate holds. ``` Another further advantage is that it's now clearer to identify sources of dangling newlines. I tried fix those myself but to no avail. I'm open to suggestions as to how to get rid of empty changelog entries that still happen to contain just newlines (I think that's the source of the issue).
50 lines
1.8 KiB
Bash
Executable File
50 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright (c) 2022 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
echo >&2 "Usage: ./unreleased.sh <revision range>"
|
|
echo >&2 "Prints all changelog entries added by the given revision range"
|
|
echo >&2 "For info about <revision range> please see gitrevisions(7)"
|
|
exit 64
|
|
fi
|
|
|
|
set -euo pipefail
|
|
|
|
COMMITS_IN_GIVEN_RANGE=$(git log --format=%H "$1")
|
|
|
|
extract_changelog () {
|
|
awk '
|
|
# Skip empty lines.
|
|
/^$/ {next}
|
|
|
|
# Take entire line, uppercase, compare to CHANGELOG_END.
|
|
# If it matches, set flag to 0 (false) and skip current line.
|
|
toupper($0) ~ /CHANGELOG_END/ { flag=0; next }
|
|
|
|
# If uppercased line matches CHANGELOG_BEGIN, skip current line and set
|
|
# flag to 1 (true).
|
|
toupper($0) ~ /CHANGELOG_BEGIN/ { flag=1; next }
|
|
|
|
# Because all previous cases skip the current line, if we reach this
|
|
# point we know that the current line is not blank, does not contain
|
|
# CHANGELOG_END, and does not contain CHANGELOG_BEGIN. Here we match
|
|
# the line based on the value of flag, regardless of the content of the
|
|
# line. Because there is no action associated with this condition, the
|
|
# default one is applied when it matches (i.e. when flag != 0), which
|
|
# is to print the entire current line.
|
|
flag
|
|
'
|
|
}
|
|
|
|
for SHA in $COMMITS_IN_GIVEN_RANGE; do
|
|
COMMIT_MESSAGE_BODY=$(git show --quiet --format=%b "$SHA")
|
|
COMMIT_CHANGELOG=$(echo "$COMMIT_MESSAGE_BODY" | extract_changelog)
|
|
if [[ ! -z "$COMMIT_CHANGELOG" ]]; then
|
|
COMMIT_AUTHOR_AND_SUBJECT=$(git show --quiet --format="* %s (committer: %an | hash: %h)" "$SHA")
|
|
echo "$COMMIT_AUTHOR_AND_SUBJECT"
|
|
echo "$COMMIT_CHANGELOG"
|
|
echo "----------------"
|
|
fi
|
|
done
|