tests: propagate $(TAR) down from the toplevel Makefile
[gitweb.git] / t / t7502-commit.sh
index 21ac785e3d61aa94bae22db488fae893f315ba0b..c25eff9e468acd628cf0a5e7a0968c801396e9f8 100755 (executable)
@@ -85,7 +85,166 @@ test_expect_success 'verbose' '
        git add negative &&
        git status -v | sed -ne "/^diff --git /p" >actual &&
        echo "diff --git a/negative b/negative" >expect &&
-       diff -u expect actual
+       test_cmp expect actual
+
+'
+
+test_expect_success 'cleanup commit messages (verbatim,-t)' '
+
+       echo >>negative &&
+       { echo;echo "# text";echo; } >expect &&
+       git commit --cleanup=verbatim -t expect -a &&
+       git cat-file -p HEAD |sed -e "1,/^\$/d" |head -n 3 >actual &&
+       test_cmp expect actual
+
+'
+
+test_expect_success 'cleanup commit messages (verbatim,-F)' '
+
+       echo >>negative &&
+       git commit --cleanup=verbatim -F expect -a &&
+       git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
+       test_cmp expect actual
+
+'
+
+test_expect_success 'cleanup commit messages (verbatim,-m)' '
+
+       echo >>negative &&
+       git commit --cleanup=verbatim -m "$(cat expect)" -a &&
+       git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
+       test_cmp expect actual
+
+'
+
+test_expect_success 'cleanup commit messages (whitespace,-F)' '
+
+       echo >>negative &&
+       { echo;echo "# text";echo; } >text &&
+       echo "# text" >expect &&
+       git commit --cleanup=whitespace -F text -a &&
+       git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
+       test_cmp expect actual
+
+'
+
+test_expect_success 'cleanup commit messages (strip,-F)' '
+
+       echo >>negative &&
+       { echo;echo "# text";echo sample;echo; } >text &&
+       echo sample >expect &&
+       git commit --cleanup=strip -F text -a &&
+       git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
+       test_cmp expect actual
+
+'
+
+echo "sample
+
+# Please enter the commit message for your changes.
+# (Comment lines starting with '#' will not be included)" >expect
+
+test_expect_success 'cleanup commit messages (strip,-F,-e)' '
+
+       echo >>negative &&
+       { echo;echo sample;echo; } >text &&
+       git commit -e -F text -a &&
+       head -n 4 .git/COMMIT_EDITMSG >actual &&
+       test_cmp expect actual
+
+'
+
+echo "#
+# Author:    $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+#" >> expect
+
+test_expect_success 'author different from committer' '
+
+       echo >>negative &&
+       git commit -e -m "sample"
+       head -n 7 .git/COMMIT_EDITMSG >actual &&
+       test_cmp expect actual
+'
+
+mv expect expect.tmp
+sed '$d' < expect.tmp > expect
+rm -f expect.tmp
+echo "# Committer:
+#" >> expect
+
+test_expect_success 'committer is automatic' '
+
+       echo >>negative &&
+       (
+               unset GIT_COMMITTER_EMAIL
+               unset GIT_COMMITTER_NAME
+               # must fail because there is no change
+               test_must_fail git commit -e -m "sample"
+       ) &&
+       head -n 8 .git/COMMIT_EDITMSG | \
+       sed "s/^# Committer: .*/# Committer:/" >actual &&
+       test_cmp expect actual
+'
+
+pwd=`pwd`
+cat >> .git/FAKE_EDITOR << EOF
+#! /bin/sh
+echo editor started > "$pwd/.git/result"
+exit 0
+EOF
+chmod +x .git/FAKE_EDITOR
+
+test_expect_success 'do not fire editor in the presence of conflicts' '
+
+       git clean -f &&
+       echo f >g &&
+       git add g &&
+       git commit -m "add g" &&
+       git branch second &&
+       echo master >g &&
+       echo g >h &&
+       git add g h &&
+       git commit -m "modify g and add h" &&
+       git checkout second &&
+       echo second >g &&
+       git add g &&
+       git commit -m second &&
+       # Must fail due to conflict
+       test_must_fail git cherry-pick -n master &&
+       echo "editor not started" >.git/result &&
+       (
+               GIT_EDITOR="$(pwd)/.git/FAKE_EDITOR" &&
+               export GIT_EDITOR &&
+               test_must_fail git commit
+       ) &&
+       test "$(cat .git/result)" = "editor not started"
+'
+
+pwd=`pwd`
+cat >.git/FAKE_EDITOR <<EOF
+#! $SHELL_PATH
+# kill -TERM command added below.
+EOF
+
+test_expect_success 'a SIGTERM should break locks' '
+       echo >>negative &&
+       "$SHELL_PATH" -c '\''
+         echo kill -TERM $$ >> .git/FAKE_EDITOR
+         GIT_EDITOR=.git/FAKE_EDITOR exec git commit -a'\'' && exit 1  # should fail
+       ! test -f .git/index.lock
+'
+
+rm -f .git/MERGE_MSG .git/COMMIT_EDITMSG
+git reset -q --hard
+
+test_expect_success 'Hand committing of a redundant merge removes dups' '
+
+       git rev-parse second master >expect &&
+       test_must_fail git merge second master &&
+       git checkout master g &&
+       EDITOR=: git commit -a &&
+       git cat-file commit HEAD | sed -n -e "s/^parent //p" -e "/^$/q" >actual &&
+       test_cmp expect actual
 
 '