forked from SerenityOS/serenity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lint-commit.sh
executable file
路35 lines (28 loc) 路 990 Bytes
/
lint-commit.sh
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
#!/usr/bin/env bash
# the file containing the commit message is passed as the first argument
commit_file="$1"
commit_message=$(cat "$commit_file")
error() {
echo -e "\033[0;31m$1:\033[0m"
echo "$commit_message"
exit 1
}
# fail if the commit message contains windows style line breaks (carriage returns)
if grep -q -U $'\x0D' "$commit_file"; then
error "Commit message contains CRLF line breaks (only unix-style LF linebreaks are allowed)"
fi
line_number=0
while read -r line; do
# ignore comment lines
[[ "$line" =~ ^#.* ]] && continue
((line_number += 1))
line_length=${#line}
category_pattern="^\S.*?: .+"
if [[ $line_number -eq 1 ]] && (echo "$line" | grep -P -v -q "$category_pattern"); then
error "Missing category in commit title (if this is a fix up of a previous commit, it should be squashed)"
fi
if [[ $line_length -gt 72 ]]; then
error "Commit message lines are too long (maximum allowed is 72 characters)"
fi
done <"$commit_file"
exit 0