git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wincent Colaiuta <win@wincent.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, krh@redhat.com, Wincent Colaiuta <win@wincent.com>
Subject: [PATCH 4/4] Add tests for pre-commit and commit-msg hooks
Date: Sat,  8 Dec 2007 13:29:47 +0100	[thread overview]
Message-ID: <1197116987-21802-1-git-send-email-win@wincent.com> (raw)
In-Reply-To: <1197113889-16243-1-git-send-email-win@wincent.com>

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>
---
 t/t7501-commit.sh          |    2 +-
 t/t7503-pre-commit-hook.sh |   64 ++++++++++++++++++++++++++++++++
 t/t7504-commit-msg-hook.sh |   88 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 153 insertions(+), 1 deletions(-)
 create mode 100755 t/t7503-pre-commit-hook.sh
 create mode 100755 t/t7504-commit-msg-hook.sh

diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
index 19c4b2c..05aa97d 100755
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh
@@ -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
diff --git a/t/t7503-pre-commit-hook.sh b/t/t7503-pre-commit-hook.sh
new file mode 100755
index 0000000..c8097a7
--- /dev/null
+++ b/t/t7503-pre-commit-hook.sh
@@ -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
diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh
new file mode 100755
index 0000000..17aad7c
--- /dev/null
+++ b/t/t7504-commit-msg-hook.sh
@@ -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
-- 
1.5.3.7.1115.g3d1c

  parent reply	other threads:[~2007-12-08 12:31 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-08 11:38 [PATCH 0/3] builtin-commit fixes Wincent Colaiuta
2007-12-08 11:38 ` [PATCH 1/3] Allow --no-verify to bypass commit-msg hook Wincent Colaiuta
2007-12-08 11:38   ` [PATCH 2/3] Documentation: fix --no-verify documentation for "git commit" Wincent Colaiuta
2007-12-08 11:38     ` [PATCH 3/3] Fix commit-msg hook to allow editing Wincent Colaiuta
2007-12-09  7:21       ` Junio C Hamano
2007-12-09 12:22         ` Wincent Colaiuta
2007-12-08 12:29 ` Wincent Colaiuta [this message]
2007-12-08 12:51   ` [PATCH 4/4] Add tests for pre-commit and commit-msg hooks Wincent Colaiuta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1197116987-21802-1-git-send-email-win@wincent.com \
    --to=win@wincent.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=krh@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).