blob: 984889b39d3f8e9941a2aadc8cec833fe42176a2 [file] [log] [blame]
Wincent Colaiuta264474f2007-12-08 13:29:47 +01001#!/bin/sh
2
3test_description='pre-commit hook'
4
5. ./test-lib.sh
6
Wincent Colaiutacf7e1472007-12-10 08:42:45 +01007test_expect_success 'with no hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +01008
Wincent Colaiutacf7e1472007-12-10 08:42:45 +01009 echo "foo" > file &&
10 git add file &&
11 git commit -m "first"
12
13'
14
15test_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'
Wincent Colaiuta264474f2007-12-08 13:29:47 +010022
23# now install hook that always succeeds
24HOOKDIR="$(git rev-parse --git-dir)/hooks"
25HOOK="$HOOKDIR/pre-commit"
26mkdir -p "$HOOKDIR"
27cat > "$HOOK" <<EOF
28#!/bin/sh
29exit 0
30EOF
31chmod +x "$HOOK"
32
Wincent Colaiutacf7e1472007-12-10 08:42:45 +010033test_expect_success 'with succeeding hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +010034
Wincent Colaiutacf7e1472007-12-10 08:42:45 +010035 echo "more" >> file &&
36 git add file &&
37 git commit -m "more"
38
39'
40
41test_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'
Wincent Colaiuta264474f2007-12-08 13:29:47 +010048
49# now a hook that fails
50cat > "$HOOK" <<EOF
51#!/bin/sh
52exit 1
53EOF
54
Junio C Hamano41ac4142008-02-01 01:50:53 -080055test_expect_success 'with failing hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +010056
Wincent Colaiutacf7e1472007-12-10 08:42:45 +010057 echo "another" >> file &&
58 git add file &&
Stephan Beyerd492b312008-07-12 17:47:52 +020059 test_must_fail git commit -m "another"
Wincent Colaiutacf7e1472007-12-10 08:42:45 +010060
61'
62
63test_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'
Wincent Colaiuta264474f2007-12-08 13:29:47 +010070
71chmod -x "$HOOK"
Johannes Sixtee9fb682009-03-13 22:55:27 +010072test_expect_success POSIXPERM 'with non-executable hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +010073
Wincent Colaiutacf7e1472007-12-10 08:42:45 +010074 echo "content" >> file &&
75 git add file &&
76 git commit -m "content"
77
78'
79
Johannes Sixtee9fb682009-03-13 22:55:27 +010080test_expect_success POSIXPERM '--no-verify with non-executable hook' '
Wincent Colaiutacf7e1472007-12-10 08:42:45 +010081
82 echo "more content" >> file &&
83 git add file &&
84 git commit --no-verify -m "more content"
85
86'
David Aguilarc35ec8c2011-06-02 02:26:25 -070087chmod +x "$HOOK"
88
89# a hook that checks $GIT_PREFIX and succeeds inside the
90# success/ subdirectory only
91cat > "$HOOK" <<EOF
92#!/bin/sh
93test \$GIT_PREFIX = success/
94EOF
95
96test_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
108test_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'
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100120
Junio C Hamano7dfe8ad2012-03-11 03:12:10 -0700121test_expect_success 'check the author in hook' '
Junio C Hamano04861982012-03-11 03:51:32 -0700122 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
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100139test_done