-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
pre-commit
executable file
·64 lines (48 loc) · 1.26 KB
/
pre-commit
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
#!/bin/sh
here=${0%/*}
CHIP_ROOT=$(cd "$here/.." && pwd)
SAVED_UNSTAGED=0
SAVED_UNSTAGED_FILE=$(git rev-parse --short HEAD)-unstaged.diff
RESTYLED=0
save_unstaged() {
if [[ $SAVED_UNSTAGED -ne 0 ]]; then
git diff --output="$SAVED_UNSTAGED_FILE"
git apply -R "$SAVED_UNSTAGED_FILE"
fi
}
revert_unstaged() {
if [[ $SAVED_UNSTAGED -ne 0 ]]; then
git apply "$SAVED_UNSTAGED_FILE"
rm "$SAVED_UNSTAGED_FILE"
fi
SAVED_UNSTAGED=0
}
revert_restyled() {
if [[ $RESTYLED -ne 0 ]]; then
# Reset the changes introduced by restyle
git stash push -q --keep-index
git stash drop -q
fi
RESTYLED=0
}
revert_if_needed() {
revert_restyled
revert_unstaged
}
trap "revert_if_needed; exit 1" SIGINT SIGTERM SIGKILL
git diff --quiet
SAVED_UNSTAGED=$?
# If there are unstaged files, save them for now
save_unstaged
# Try restyling the code
"$CHIP_ROOT"/scripts/helpers/restyle-diff.sh
git diff --quiet
RESTYLED=$?
FAILED_COMMIT="$RESTYLED"
revert_if_needed
if [[ $FAILED_COMMIT -ne 0 ]]; then
echo "Commit Failed: Code needs restyling before committing."
echo "Restyling can be done by running $CHIP_ROOT/scripts/helpers/restyle-diff.sh"
exit 1
fi
echo "Code doesn't need restyling. Committing."