Skip to content

Commit

Permalink
Add tests for pre-commit and commit-msg hooks
Browse files Browse the repository at this point in the history
As desired, these pass for git-commit.sh, fail for builtin-commit (prior
to the fixes), and succeeded for builtin-commit (after the fixes).

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Wincent Colaiuta authored and Junio C Hamano committed Dec 9, 2007
1 parent 740001a commit 264474f
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 1 deletion.
2 changes: 1 addition & 1 deletion t/t7501-commit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#

# FIXME: Test the various index usages, -i and -o, test reflog,
# signoff, hooks
# signoff

test_description='git-commit'
. ./test-lib.sh
Expand Down
64 changes: 64 additions & 0 deletions t/t7503-pre-commit-hook.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/bin/sh

test_description='pre-commit 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/pre-commit"
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'"

test_done
88 changes: 88 additions & 0 deletions t/t7504-commit-msg-hook.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,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

0 comments on commit 264474f

Please sign in to comment.