forked from nachaphon-phontree/TrustTunnelClient
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpre-commit
More file actions
executable file
·91 lines (75 loc) · 2.23 KB
/
Copy pathpre-commit
File metadata and controls
executable file
·91 lines (75 loc) · 2.23 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/sh
set -e -f -u
# This comment is used to simplify checking local copies of the script. Bump
# this number every time a significant change is made to this script.
#
# AdGuard-Project-Version: 1
# Only show interactive prompts if there a terminal is attached to stdout.
# While this technically doesn't guarantee that reading from /dev/tty works,
# this should work reasonably well on all of our supported development systems
# and in most terminal emulators.
is_tty='0'
if [ -t '1' ]; then
is_tty='1'
fi
readonly is_tty
# prompt is a helper that prompts the user for interactive input if that can be
# done. If there is no terminal attached, it sleeps for two seconds, giving the
# programmer some time to react, and returns with a zero exit code.
prompt() {
if [ "$is_tty" -eq '0' ]; then
sleep 2
return 0
fi
while true; do
printf 'commit anyway? y/[n]: '
read -r ans </dev/tty
case "$ans" in
'y' | 'Y')
break
;;
'' | 'n' | 'N')
exit 1
;;
*)
continue
;;
esac
done
}
# Warn the programmer about unstaged changes and untracked files, but do not
# fail the commit, because those changes might be temporary or for a different
# branch.
#
# shellcheck disable=SC2016
awk_prog='substr($2, 2, 1) != "." { print $9; } $1 == "?" { print $2; }'
readonly awk_prog
unstaged="$(git status --porcelain=2 | awk "$awk_prog")"
readonly unstaged
if [ "$unstaged" != '' ]; then
printf 'WARNING: you have unstaged changes:\n\n%s\n\n' "$unstaged"
prompt
fi
# Warn the programmer about temporary todos and skel FIXMEs, but do not fail the
# commit, because the commit could be in a temporary branch.
temp_todos="$(
git grep -e 'TODO.*!!' -- \
':!./scripts/hooks/pre-commit' \
|| :
)"
readonly temp_todos
if [ "$temp_todos" != '' ]; then
printf 'WARNING: you have temporary todos:\n\n%s\n\n' "$temp_todos"
prompt
fi
verbose="${VERBOSE:-0}"
readonly verbose
if [ "$(git diff --cached --name-only -- '*.md' || :)" != '' ]; then
make VERBOSE="$verbose" lint-md
fi
if [ "$(git diff --cached --name-only -- '*.rs' 'Cargo.toml' 'Cargo.lock' || :)" != '' ]; then
make VERBOSE="$verbose" lint-rust test-rust
fi
if [ "$(git diff --cached --name-only -- '*.cpp' '*.h' || :)" != '' ]; then
make VERBOSE="$verbose" lint-cpp test-cpp
fi