forked from cockroachdb/cockroach
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprepare-commit-msg
executable file
·75 lines (66 loc) · 2.26 KB
/
prepare-commit-msg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/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