mirror of
https://github.com/git/git
synced 2024-11-05 18:59:29 +00:00
f69e836fab
This fixes the remainder of the issues where the test script itself is at fault for failing when the git checkout path contains whitespace or other shell metacharacters. The majority of git svn tests used the idiom test_expect_success "title" "test script using $svnrepo" These were changed to have the test script in single-quotes: test_expect_success "title" 'test script using "$svnrepo"' which unfortunately makes the patch appear larger than it really is. One consequence of this change is that in the verbose test output the value of $svnrepo (and in some cases other variables, too) is no longer expanded, i.e. previously we saw * expecting success: test script using /path/to/git/t/trash/svnrepo but now it is: * expecting success: test script using "$svnrepo" Signed-off-by: Bryan Donlan <bdonlan@fushizen.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
223 lines
4.1 KiB
Bash
Executable file
223 lines
4.1 KiB
Bash
Executable file
#!/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"
|
|
|
|
'
|
|
|
|
# set up fake editor for interactive editing
|
|
cat > fake-editor <<'EOF'
|
|
#!/bin/sh
|
|
cp FAKE_MSG "$1"
|
|
exit 0
|
|
EOF
|
|
chmod +x fake-editor
|
|
|
|
## Not using test_set_editor here so we can easily ensure the editor variable
|
|
## is only set for the editor tests
|
|
FAKE_EDITOR="$(pwd)/fake-editor"
|
|
export FAKE_EDITOR
|
|
|
|
test_expect_success 'with no hook (editor)' '
|
|
|
|
echo "more foo" >> file &&
|
|
git add file &&
|
|
echo "more foo" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with no hook' '
|
|
|
|
echo "bar" > file &&
|
|
git add file &&
|
|
git commit --no-verify -m "bar"
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with no hook (editor)' '
|
|
|
|
echo "more bar" > file &&
|
|
git add file &&
|
|
echo "more bar" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
|
|
|
|
'
|
|
|
|
# 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 'with succeeding hook (editor)' '
|
|
|
|
echo "more more" >> file &&
|
|
git add file &&
|
|
echo "more more" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with succeeding hook' '
|
|
|
|
echo "even more" >> file &&
|
|
git add file &&
|
|
git commit --no-verify -m "even more"
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with succeeding hook (editor)' '
|
|
|
|
echo "even more more" >> file &&
|
|
git add file &&
|
|
echo "even more more" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
|
|
|
|
'
|
|
|
|
# now a hook that fails
|
|
cat > "$HOOK" <<EOF
|
|
#!/bin/sh
|
|
exit 1
|
|
EOF
|
|
|
|
test_expect_success 'with failing hook' '
|
|
|
|
echo "another" >> file &&
|
|
git add file &&
|
|
! git commit -m "another"
|
|
|
|
'
|
|
|
|
test_expect_success 'with failing hook (editor)' '
|
|
|
|
echo "more another" >> file &&
|
|
git add file &&
|
|
echo "more another" > FAKE_MSG &&
|
|
! (GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit)
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with failing hook' '
|
|
|
|
echo "stuff" >> file &&
|
|
git add file &&
|
|
git commit --no-verify -m "stuff"
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with failing hook (editor)' '
|
|
|
|
echo "more stuff" >> file &&
|
|
git add file &&
|
|
echo "more stuff" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
|
|
|
|
'
|
|
|
|
chmod -x "$HOOK"
|
|
test_expect_success 'with non-executable hook' '
|
|
|
|
echo "content" >> file &&
|
|
git add file &&
|
|
git commit -m "content"
|
|
|
|
'
|
|
|
|
test_expect_success 'with non-executable hook (editor)' '
|
|
|
|
echo "content again" >> file &&
|
|
git add file &&
|
|
echo "content again" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -m "content again"
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with non-executable hook' '
|
|
|
|
echo "more content" >> file &&
|
|
git add file &&
|
|
git commit --no-verify -m "more content"
|
|
|
|
'
|
|
|
|
test_expect_success '--no-verify with non-executable hook (editor)' '
|
|
|
|
echo "even more content" >> file &&
|
|
git add file &&
|
|
echo "even more content" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
|
|
|
|
'
|
|
|
|
# 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 edits commit message (editor)' '
|
|
|
|
echo "additional content" >> file &&
|
|
git add file &&
|
|
echo "additional content" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
|
|
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_expect_success "hook doesn't edit commit message (editor)" '
|
|
|
|
echo "more plus" >> file &&
|
|
git add file &&
|
|
echo "more plus" > FAKE_MSG &&
|
|
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
|
|
commit_msg_is "more plus"
|
|
|
|
'
|
|
|
|
test_done
|