Code

17aad7c10ddadbf2fe65c98e62619d9a3789aa2b
[git.git] / t / t7504-commit-msg-hook.sh
1 #!/bin/sh
3 test_description='commit-msg hook'
5 . ./test-lib.sh
7 test_expect_success "with no hook" \
8         "echo 'foo' > file &&
9          git add file &&
10          git commit -m 'first'"
12 test_expect_success "--no-verify with no hook" \
13         "echo 'bar' > file &&
14          git add file &&
15          git commit --no-verify -m 'bar'"
17 # now install hook that always succeeds
18 HOOKDIR="$(git rev-parse --git-dir)/hooks"
19 HOOK="$HOOKDIR/commit-msg"
20 mkdir -p "$HOOKDIR"
21 cat > "$HOOK" <<EOF
22 #!/bin/sh
23 exit 0
24 EOF
25 chmod +x "$HOOK"
27 test_expect_success "with succeeding hook" \
28         "echo 'more' >> file &&
29          git add file &&
30          git commit -m 'more'"
32 test_expect_success "--no-verify with succeeding hook" \
33         "echo 'even more' >> file &&
34          git add file &&
35          git commit --no-verify -m 'even more'"
37 # now a hook that fails
38 cat > "$HOOK" <<EOF
39 #!/bin/sh
40 exit 1
41 EOF
43 test_expect_failure "with failing hook" \
44         "echo 'another' >> file &&
45          git add file &&
46          git commit -m 'another'"
48 test_expect_success "--no-verify with failing hook" \
49         "echo 'stuff' >> file &&
50          git add file &&
51          git commit --no-verify -m 'stuff'"
53 chmod -x "$HOOK"
54 test_expect_success "with non-executable hook" \
55         "echo 'content' >> file &&
56          git add file &&
57          git commit -m 'content'"
59 test_expect_success "--no-verify with non-executable hook" \
60         "echo 'more content' >> file &&
61          git add file &&
62          git commit --no-verify -m 'more content'"
64 # now a hook that edits the commit message
65 cat > "$HOOK" <<'EOF'
66 #!/bin/sh
67 echo "new message" > "$1"
68 exit 0
69 EOF
70 chmod +x "$HOOK"
72 commit_msg_is () {
73         test "`git log --pretty=format:%s%b -1`" = "$1"
74 }
76 test_expect_success "hook edits commit message" \
77         "echo 'additional' >> file &&
78          git add file &&
79          git commit -m 'additional' &&
80          commit_msg_is 'new message'"
82 test_expect_success "hook doesn't edit commit message" \
83         "echo 'plus' >> file &&
84          git add file &&
85          git commit --no-verify -m 'plus' &&
86          commit_msg_is 'plus'"
88 test_done