daml/unreleased.sh
Stefano Baghino 0798fe155b
Add information and separator to unreleased.sh output (#13827)
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).
2022-05-09 17:49:36 +02:00

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