Merge branch 'jk/grep-double-dash' into maint
[gitweb.git] / t / t3301-notes.sh
index 9393a25511f46632763c374fec700c3eb446509e..5d9604b8155401a2e345a69a5d030cffd7d16818 100755 (executable)
@@ -16,7 +16,7 @@ VISUAL=./fake_editor.sh
 export VISUAL
 
 test_expect_success 'cannot annotate non-existing HEAD' '
-       ! MSG=3 git notes edit
+       (MSG=3 && export MSG && test_must_fail git notes edit)
 '
 
 test_expect_success setup '
@@ -31,8 +31,27 @@ test_expect_success setup '
 '
 
 test_expect_success 'need valid notes ref' '
-       ! MSG=1 GIT_NOTES_REF='/' git notes edit &&
-       ! MSG=2 GIT_NOTES_REF='/' git notes show
+       (MSG=1 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF &&
+        test_must_fail git notes edit) &&
+       (MSG=2 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF &&
+        test_must_fail git notes show)
+'
+
+test_expect_success 'refusing to edit in refs/heads/' '
+       (MSG=1 GIT_NOTES_REF=refs/heads/bogus &&
+        export MSG GIT_NOTES_REF &&
+        test_must_fail git notes edit)
+'
+
+test_expect_success 'refusing to edit in refs/remotes/' '
+       (MSG=1 GIT_NOTES_REF=refs/remotes/bogus &&
+        export MSG GIT_NOTES_REF &&
+        test_must_fail git notes edit)
+'
+
+# 1 indicates caught gracefully by die, 128 means git-show barked
+test_expect_success 'handle empty notes gracefully' '
+       git notes show ; test 1 = $?
 '
 
 test_expect_success 'create notes' '
@@ -42,7 +61,7 @@ test_expect_success 'create notes' '
        test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
        test b1 = $(git notes show) &&
        git show HEAD^ &&
-       ! git notes show HEAD^
+       test_must_fail git notes show HEAD^
 '
 
 cat > expect << EOF
@@ -91,5 +110,100 @@ test_expect_success 'show multi-line notes' '
        git log -2 > output &&
        test_cmp expect-multiline output
 '
+test_expect_success 'create -m and -F notes (setup)' '
+       : > a4 &&
+       git add a4 &&
+       test_tick &&
+       git commit -m 4th &&
+       echo "xyzzy" > note5 &&
+       git notes edit -m spam -F note5 -m "foo
+bar
+baz"
+'
+
+whitespace="    "
+cat > expect-m-and-F << EOF
+commit 15023535574ded8b1a89052b32673f84cf9582b8
+Author: A U Thor <author@example.com>
+Date:   Thu Apr 7 15:16:13 2005 -0700
+
+    4th
+
+Notes:
+    spam
+$whitespace
+    xyzzy
+$whitespace
+    foo
+    bar
+    baz
+EOF
+
+printf "\n" >> expect-m-and-F
+cat expect-multiline >> expect-m-and-F
+
+test_expect_success 'show -m and -F notes' '
+       git log -3 > output &&
+       test_cmp expect-m-and-F output
+'
+
+cat >expect << EOF
+commit 15023535574ded8b1a89052b32673f84cf9582b8
+tree e070e3af51011e47b183c33adf9736736a525709
+parent 1584215f1d29c65e99c6c6848626553fdd07fd75
+author A U Thor <author@example.com> 1112912173 -0700
+committer C O Mitter <committer@example.com> 1112912173 -0700
+
+    4th
+EOF
+test_expect_success 'git log --pretty=raw does not show notes' '
+       git log -1 --pretty=raw >output &&
+       test_cmp expect output
+'
+
+cat >>expect <<EOF
+
+Notes:
+    spam
+$whitespace
+    xyzzy
+$whitespace
+    foo
+    bar
+    baz
+EOF
+test_expect_success 'git log --show-notes' '
+       git log -1 --pretty=raw --show-notes >output &&
+       test_cmp expect output
+'
+
+test_expect_success 'git log --no-notes' '
+       git log -1 --no-notes >output &&
+       ! grep spam output
+'
+
+test_expect_success 'git format-patch does not show notes' '
+       git format-patch -1 --stdout >output &&
+       ! grep spam output
+'
+
+test_expect_success 'git format-patch --show-notes does show notes' '
+       git format-patch --show-notes -1 --stdout >output &&
+       grep spam output
+'
+
+for pretty in \
+       "" --pretty --pretty=raw --pretty=short --pretty=medium \
+       --pretty=full --pretty=fuller --pretty=format:%s --oneline
+do
+       case "$pretty" in
+       "") p= not= negate="" ;;
+       ?*) p="$pretty" not=" not" negate="!" ;;
+       esac
+       test_expect_success "git show $pretty does$not show notes" '
+               git show $p >output &&
+               eval "$negate grep spam output"
+       '
+done
 
 test_done