]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | ||
3 | test_description='pre-commit hook' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success 'with no hook' ' | |
8 | ||
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 | ' | |
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 | ||
33 | test_expect_success 'with succeeding hook' ' | |
34 | ||
35 | echo "more" >> file && | |
36 | git add file && | |
37 | git commit -m "more" | |
38 | ||
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 | ' | |
48 | ||
49 | # now a hook that fails | |
50 | cat > "$HOOK" <<EOF | |
51 | #!/bin/sh | |
52 | exit 1 | |
53 | EOF | |
54 | ||
55 | test_expect_success 'with failing hook' ' | |
56 | ||
57 | echo "another" >> file && | |
58 | git add file && | |
59 | test_must_fail git commit -m "another" | |
60 | ||
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 | ' | |
70 | ||
71 | chmod -x "$HOOK" | |
72 | test_expect_success POSIXPERM 'with non-executable hook' ' | |
73 | ||
74 | echo "content" >> file && | |
75 | git add file && | |
76 | git commit -m "content" | |
77 | ||
78 | ' | |
79 | ||
80 | test_expect_success POSIXPERM '--no-verify with non-executable hook' ' | |
81 | ||
82 | echo "more content" >> file && | |
83 | git add file && | |
84 | git commit --no-verify -m "more content" | |
85 | ||
86 | ' | |
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 | ' | |
120 | ||
121 | test_expect_success 'check the author in hook' ' | |
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 | ||
139 | test_done |