]>
Commit | Line | Data |
---|---|---|
264474f2 WC |
1 | #!/bin/sh |
2 | ||
3 | test_description='pre-commit hook' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
cf7e147c | 7 | test_expect_success 'with no hook' ' |
264474f2 | 8 | |
cf7e147c WC |
9 | echo "foo" > file && |
10 | git add file && | |
11 | git commit -m "first" | |
12 | ||
13 | ' | |
14 | ||
15 | test_expect_success '--no-verify with no hook' ' | |
16 | ||
17 | echo "bar" > file && | |
18 | git add file && | |
19 | git commit --no-verify -m "bar" | |
20 | ||
21 | ' | |
264474f2 WC |
22 | |
23 | # now install hook that always succeeds | |
24 | HOOKDIR="$(git rev-parse --git-dir)/hooks" | |
25 | HOOK="$HOOKDIR/pre-commit" | |
26 | mkdir -p "$HOOKDIR" | |
27 | cat > "$HOOK" <<EOF | |
28 | #!/bin/sh | |
29 | exit 0 | |
30 | EOF | |
31 | chmod +x "$HOOK" | |
32 | ||
cf7e147c WC |
33 | test_expect_success 'with succeeding hook' ' |
34 | ||
35 | echo "more" >> file && | |
36 | git add file && | |
37 | git commit -m "more" | |
264474f2 | 38 | |
cf7e147c WC |
39 | ' |
40 | ||
41 | test_expect_success '--no-verify with succeeding hook' ' | |
42 | ||
43 | echo "even more" >> file && | |
44 | git add file && | |
45 | git commit --no-verify -m "even more" | |
46 | ||
47 | ' | |
264474f2 WC |
48 | |
49 | # now a hook that fails | |
50 | cat > "$HOOK" <<EOF | |
51 | #!/bin/sh | |
52 | exit 1 | |
53 | EOF | |
54 | ||
41ac414e | 55 | test_expect_success 'with failing hook' ' |
cf7e147c WC |
56 | |
57 | echo "another" >> file && | |
58 | git add file && | |
d492b31c | 59 | test_must_fail git commit -m "another" |
264474f2 | 60 | |
cf7e147c WC |
61 | ' |
62 | ||
63 | test_expect_success '--no-verify with failing hook' ' | |
64 | ||
65 | echo "stuff" >> file && | |
66 | git add file && | |
67 | git commit --no-verify -m "stuff" | |
68 | ||
69 | ' | |
264474f2 WC |
70 | |
71 | chmod -x "$HOOK" | |
ee9fb68c | 72 | test_expect_success POSIXPERM 'with non-executable hook' ' |
cf7e147c WC |
73 | |
74 | echo "content" >> file && | |
75 | git add file && | |
76 | git commit -m "content" | |
77 | ||
78 | ' | |
79 | ||
ee9fb68c | 80 | test_expect_success POSIXPERM '--no-verify with non-executable hook' ' |
cf7e147c WC |
81 | |
82 | echo "more content" >> file && | |
83 | git add file && | |
84 | git commit --no-verify -m "more content" | |
85 | ||
86 | ' | |
c35ec8c9 DA |
87 | chmod +x "$HOOK" |
88 | ||
89 | # a hook that checks $GIT_PREFIX and succeeds inside the | |
90 | # success/ subdirectory only | |
91 | cat > "$HOOK" <<EOF | |
92 | #!/bin/sh | |
93 | test \$GIT_PREFIX = success/ | |
94 | EOF | |
95 | ||
96 | test_expect_success 'with hook requiring GIT_PREFIX' ' | |
97 | ||
98 | echo "more content" >> file && | |
99 | git add file && | |
100 | mkdir success && | |
101 | ( | |
102 | cd success && | |
103 | git commit -m "hook requires GIT_PREFIX = success/" | |
104 | ) && | |
105 | rmdir success | |
106 | ' | |
107 | ||
108 | test_expect_success 'with failing hook requiring GIT_PREFIX' ' | |
109 | ||
110 | echo "more content" >> file && | |
111 | git add file && | |
112 | mkdir fail && | |
113 | ( | |
114 | cd fail && | |
115 | test_must_fail git commit -m "hook must fail" | |
116 | ) && | |
117 | rmdir fail && | |
118 | git checkout -- file | |
119 | ' | |
264474f2 | 120 | |
7dfe8ad6 | 121 | test_expect_success 'check the author in hook' ' |
04861982 JH |
122 | write_script "$HOOK" <<-\EOF && |
123 | test "$GIT_AUTHOR_NAME" = "New Author" && | |
124 | test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com" | |
125 | EOF | |
126 | test_must_fail git commit --allow-empty -m "by a.u.thor" && | |
127 | ( | |
128 | GIT_AUTHOR_NAME="New Author" && | |
129 | GIT_AUTHOR_EMAIL="newauthor@example.com" && | |
130 | export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL && | |
131 | git commit --allow-empty -m "by new.author via env" && | |
132 | git show -s | |
133 | ) && | |
134 | git commit --author="New Author <newauthor@example.com>" \ | |
135 | --allow-empty -m "by new.author via command line" && | |
136 | git show -s | |
137 | ' | |
138 | ||
264474f2 | 139 | test_done |