t3506: validate '-m 1 -ff' is now accepted for non-merge commits
[gitweb.git] / t / t7507-commit-verbose.sh
index da5bd3b5a585667dad97481df27049f0aa7415eb..ed2653d46fe6cd0ed1dd5dc2dfd73f7340b8fe31 100755 (executable)
@@ -3,11 +3,10 @@
 test_description='verbose commit template'
 . ./test-lib.sh
 
-cat >check-for-diff <<EOF
-#!$SHELL_PATH
-exec grep '^diff --git' "\$1"
+write_script "check-for-diff" <<\EOF &&
+grep '^diff --git' "$1" >out
+exit 0
 EOF
-chmod +x check-for-diff
 test_set_editor "$PWD/check-for-diff"
 
 cat >message <<'EOF'
@@ -23,7 +22,8 @@ test_expect_success 'setup' '
 '
 
 test_expect_success 'initial commit shows verbose diff' '
-       git commit --amend -v
+       git commit --amend -v &&
+       test_line_count = 1 out
 '
 
 test_expect_success 'second commit' '
@@ -39,13 +39,15 @@ check_message() {
 
 test_expect_success 'verbose diff is stripped out' '
        git commit --amend -v &&
-       check_message message
+       check_message message &&
+       test_line_count = 1 out
 '
 
 test_expect_success 'verbose diff is stripped out (mnemonicprefix)' '
        git config diff.mnemonicprefix true &&
        git commit --amend -v &&
-       check_message message
+       check_message message &&
+       test_line_count = 1 out
 '
 
 cat >diff <<'EOF'
@@ -65,9 +67,91 @@ test_expect_success 'diff in message is retained without -v' '
        check_message diff
 '
 
-test_expect_failure 'diff in message is retained with -v' '
+test_expect_success 'diff in message is retained with -v' '
        git commit --amend -F diff -v &&
        check_message diff
 '
 
+test_expect_success 'submodule log is stripped out too with -v' '
+       git config diff.submodule log &&
+       git submodule add ./. sub &&
+       git commit -m "sub added" &&
+       (
+               cd sub &&
+               echo "more" >>file &&
+               git commit -a -m "submodule commit"
+       ) &&
+       (
+               GIT_EDITOR=cat &&
+               export GIT_EDITOR &&
+               test_must_fail git commit -a -v 2>err
+       ) &&
+       test_i18ngrep "Aborting commit due to empty commit message." err
+'
+
+test_expect_success 'verbose diff is stripped out with set core.commentChar' '
+       (
+               GIT_EDITOR=cat &&
+               export GIT_EDITOR &&
+               test_must_fail git -c core.commentchar=";" commit -a -v 2>err
+       ) &&
+       test_i18ngrep "Aborting commit due to empty commit message." err
+'
+
+test_expect_success 'status does not verbose without --verbose' '
+       git status >actual &&
+       ! grep "^diff --git" actual
+'
+
+test_expect_success 'setup -v -v' '
+       echo dirty >file
+'
+
+for i in true 1
+do
+       test_expect_success "commit.verbose=$i and --verbose omitted" "
+               git -c commit.verbose=$i commit --amend &&
+               test_line_count = 1 out
+       "
+done
+
+for i in false -2 -1 0
+do
+       test_expect_success "commit.verbose=$i and --verbose omitted" "
+               git -c commit.verbose=$i commit --amend &&
+               test_line_count = 0 out
+       "
+done
+
+for i in 2 3
+do
+       test_expect_success "commit.verbose=$i and --verbose omitted" "
+               git -c commit.verbose=$i commit --amend &&
+               test_line_count = 2 out
+       "
+done
+
+for i in true false -2 -1 0 1 2 3
+do
+       test_expect_success "commit.verbose=$i and --verbose" "
+               git -c commit.verbose=$i commit --amend --verbose &&
+               test_line_count = 1 out
+       "
+
+       test_expect_success "commit.verbose=$i and --no-verbose" "
+               git -c commit.verbose=$i commit --amend --no-verbose &&
+               test_line_count = 0 out
+       "
+
+       test_expect_success "commit.verbose=$i and -v -v" "
+               git -c commit.verbose=$i commit --amend -v -v &&
+               test_line_count = 2 out
+       "
+done
+
+test_expect_success "status ignores commit.verbose=true" '
+       git -c commit.verbose=true status >actual &&
+       ! grep "^diff --git actual"
+'
+
 test_done