summaryrefslogtreecommitdiff
path: root/t/t7504-commit-msg-hook.sh
blob: 17aad7c10ddadbf2fe65c98e62619d9a3789aa2b (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/sh

test_description='commit-msg hook'

. ./test-lib.sh

test_expect_success "with no hook" \
	"echo 'foo' > file &&
	 git add file &&
	 git commit -m 'first'"

test_expect_success "--no-verify with no hook" \
	"echo 'bar' > file &&
	 git add file &&
	 git commit --no-verify -m 'bar'"

# now install hook that always succeeds
HOOKDIR="$(git rev-parse --git-dir)/hooks"
HOOK="$HOOKDIR/commit-msg"
mkdir -p "$HOOKDIR"
cat > "$HOOK" <<EOF
#!/bin/sh
exit 0
EOF
chmod +x "$HOOK"

test_expect_success "with succeeding hook" \
	"echo 'more' >> file &&
	 git add file &&
	 git commit -m 'more'"

test_expect_success "--no-verify with succeeding hook" \
	"echo 'even more' >> file &&
	 git add file &&
	 git commit --no-verify -m 'even more'"

# now a hook that fails
cat > "$HOOK" <<EOF
#!/bin/sh
exit 1
EOF

test_expect_failure "with failing hook" \
	"echo 'another' >> file &&
	 git add file &&
	 git commit -m 'another'"

test_expect_success "--no-verify with failing hook" \
	"echo 'stuff' >> file &&
	 git add file &&
	 git commit --no-verify -m 'stuff'"

chmod -x "$HOOK"
test_expect_success "with non-executable hook" \
	"echo 'content' >> file &&
	 git add file &&
	 git commit -m 'content'"

test_expect_success "--no-verify with non-executable hook" \
	"echo 'more content' >> file &&
	 git add file &&
	 git commit --no-verify -m 'more content'"

# now a hook that edits the commit message
cat > "$HOOK" <<'EOF'
#!/bin/sh
echo "new message" > "$1"
exit 0
EOF
chmod +x "$HOOK"

commit_msg_is () {
	test "`git log --pretty=format:%s%b -1`" = "$1"
}

test_expect_success "hook edits commit message" \
	"echo 'additional' >> file &&
	 git add file &&
	 git commit -m 'additional' &&
	 commit_msg_is 'new message'"

test_expect_success "hook doesn't edit commit message" \
	"echo 'plus' >> file &&
	 git add file &&
	 git commit --no-verify -m 'plus' &&
	 commit_msg_is 'plus'"

test_done