Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| #!/usr/bin/env bash | |
| # | |
| # Prepare the commit message by adding a release note. | |
| set -euo pipefail | |
| if [[ "${2-}" = "message" ]]; then | |
| # This git command is non-interactive so it will not filter out any comments | |
| # we add. There is nothing more for us to do. | |
| exit 0 | |
| fi | |
| give_up() { | |
| echo "prepare-commit-msg: $@" >&2 | |
| exit 0 # exit with successful status to allow the commit to proceed | |
| } | |
| # Git can be configured to use any character as the comment indicator. See the | |
| # core.commentChar Git option. We can deduce what comment character is in effect | |
| # by looking for text that we know will be preceded by the comment character. | |
| if ! cchar=$(grep "^. Please enter the commit message for your changes." "$1" | head -c1); then | |
| give_up "unable to determine comment char" | |
| fi | |
| if ! tempfile=$(mktemp); then | |
| give_up "failed to create temporary file" | |
| fi | |
| trap "rm -f $tempfile" EXIT | |
| # Inject commit message recommendations into the commit message help text. | |
| sed_script="/$cchar.*an empty message aborts the commit./a\\ | |
| $cchar\\ | |
| $cchar Commit message recommendation:\\ | |
| $cchar\\ | |
| $cchar ---\\ | |
| $cchar <pkg>: <short description>\\ | |
| $cchar\\ | |
| $cchar <long description>\\ | |
| $cchar\\ | |
| $cchar Release note (category): <release note description>\\ | |
| $cchar ---\\ | |
| $cchar\\ | |
| $cchar Wrap long lines! 72 columns is best.\\ | |
| $cchar\\ | |
| $cchar The release note must be present if your commit has user-facing\\ | |
| $cchar changes. Leave the default above if not.\\ | |
| $cchar\\ | |
| $cchar Categories for release notes:\\ | |
| $cchar - cli change\\ | |
| $cchar - sql change\\ | |
| $cchar - admin ui change\\ | |
| $cchar - general change (e.g., change of required Go version)\\ | |
| $cchar - build change (e.g., compatibility with older CPUs)\\ | |
| $cchar - enterprise change (e.g., change to backup/restore)\\ | |
| $cchar - backwards-incompatible change\\ | |
| $cchar - performance improvement\\ | |
| $cchar - bug fix\\ | |
| " | |
| # Add an explicit "Release note: None" if no release note was specified. | |
| if ! grep -q '^Release note' "$1"; then | |
| sed_script+=" | |
| ;/$cchar Please enter the commit message for your changes./i\\ | |
| \\ | |
| Release note: None\\ | |
| " | |
| fi | |
| if ! sed "$sed_script" "$1" > "$tempfile"; then | |
| give_up "unable to inject commit message recommendations" | |
| fi | |
| if ! mv "$tempfile" "$1"; then | |
| give_up "failed overwriting commit message file" | |
| fi |