t3206-range-diff.sh: cover single-patch case
[gitweb.git] / t / t7504-commit-msg-hook.sh
index 88d4cda2992496d8ff5643caaaccf53e90dedc3a..31b9c6a2c1d3c30aa7d6d8a2eb836e7b67831d0c 100755 (executable)
@@ -101,6 +101,10 @@ cat > "$HOOK" <<EOF
 exit 1
 EOF
 
+commit_msg_is () {
+       test "$(git log --pretty=format:%s%b -1)" = "$1"
+}
+
 test_expect_success 'with failing hook' '
 
        echo "another" >> file &&
@@ -135,10 +139,37 @@ test_expect_success '--no-verify with failing hook (editor)' '
 
 '
 
+test_expect_success 'merge fails with failing hook' '
+
+       test_when_finished "git branch -D newbranch" &&
+       test_when_finished "git checkout -f master" &&
+       git checkout --orphan newbranch &&
+       : >file2 &&
+       git add file2 &&
+       git commit --no-verify file2 -m in-side-branch &&
+       test_must_fail git merge --allow-unrelated-histories master &&
+       commit_msg_is "in-side-branch" # HEAD before merge
+
+'
+
+test_expect_success 'merge bypasses failing hook with --no-verify' '
+
+       test_when_finished "git branch -D newbranch" &&
+       test_when_finished "git checkout -f master" &&
+       git checkout --orphan newbranch &&
+       git rm -f file &&
+       : >file2 &&
+       git add file2 &&
+       git commit --no-verify file2 -m in-side-branch &&
+       git merge --no-verify --allow-unrelated-histories master &&
+       commit_msg_is "Merge branch '\''master'\'' into newbranch"
+'
+
+
 chmod -x "$HOOK"
 test_expect_success POSIXPERM 'with non-executable hook' '
 
-       echo "content" >file &&
+       echo "content" >file &&
        git add file &&
        git commit -m "content"
 
@@ -178,10 +209,6 @@ 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 &&
@@ -217,7 +244,37 @@ test_expect_success "hook doesn't edit commit message (editor)" '
        echo "more plus" > FAKE_MSG &&
        GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
        commit_msg_is "more plus"
+'
 
+test_expect_success 'hook called in git-merge picks up commit message' '
+       test_when_finished "git branch -D newbranch" &&
+       test_when_finished "git checkout -f master" &&
+       git checkout --orphan newbranch &&
+       git rm -f file &&
+       : >file2 &&
+       git add file2 &&
+       git commit --no-verify file2 -m in-side-branch &&
+       git merge --allow-unrelated-histories master &&
+       commit_msg_is "new message"
+'
+
+test_expect_failure 'merge --continue remembers --no-verify' '
+       test_when_finished "git branch -D newbranch" &&
+       test_when_finished "git checkout -f master" &&
+       git checkout master &&
+       echo a >file2 &&
+       git add file2 &&
+       git commit --no-verify -m "add file2 to master" &&
+       git checkout -b newbranch master^ &&
+       echo b >file2 &&
+       git add file2 &&
+       git commit --no-verify file2 -m in-side-branch &&
+       git merge --no-verify -m not-rewritten-by-hook master &&
+       # resolve conflict:
+       echo c >file2 &&
+       git add file2 &&
+       git merge --continue &&
+       commit_msg_is not-rewritten-by-hook
 '
 
 # set up fake editor to replace `pick` by `reword`
@@ -237,4 +294,5 @@ test_expect_success 'hook is called for reword during `rebase -i`' '
 
 '
 
+
 test_done