builtin-notes: Add "append" subcommand for appending to note objects
[gitweb.git] / t / t3301-notes.sh
index d29daac5b40fc5f15dc45aa032bff376c3c52300..290ed63d4e3048cdaae77d10ea13434beaea6c7f 100755 (executable)
@@ -16,7 +16,7 @@ GIT_EDITOR=./fake_editor.sh
 export GIT_EDITOR
 
 test_expect_success 'cannot annotate non-existing HEAD' '
-       (MSG=3 && export MSG && test_must_fail git notes edit)
+       (MSG=3 && export MSG && test_must_fail git notes add)
 '
 
 test_expect_success setup '
@@ -32,18 +32,18 @@ test_expect_success setup '
 
 test_expect_success 'need valid notes ref' '
        (MSG=1 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF &&
-        test_must_fail git notes edit) &&
+        test_must_fail git notes add) &&
        (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/' '
+test_expect_success 'refusing to add notes in refs/heads/' '
        (MSG=1 GIT_NOTES_REF=refs/heads/bogus &&
         export MSG GIT_NOTES_REF &&
-        test_must_fail git notes edit)
+        test_must_fail git notes add)
 '
 
-test_expect_success 'refusing to edit in refs/remotes/' '
+test_expect_success 'refusing to edit notes in refs/remotes/' '
        (MSG=1 GIT_NOTES_REF=refs/remotes/bogus &&
         export MSG GIT_NOTES_REF &&
         test_must_fail git notes edit)
@@ -56,16 +56,34 @@ test_expect_success 'handle empty notes gracefully' '
 
 test_expect_success 'create notes' '
        git config core.notesRef refs/notes/commits &&
-       MSG=b0 git notes edit &&
+       MSG=b4 git notes add &&
        test ! -f .git/NOTES_EDITMSG &&
        test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
-       test b0 = $(git notes show) &&
+       test b4 = $(git notes show) &&
        git show HEAD^ &&
        test_must_fail git notes show HEAD^
 '
 
 test_expect_success 'edit existing notes' '
-       MSG=b1 git notes edit &&
+       MSG=b3 git notes edit &&
+       test ! -f .git/NOTES_EDITMSG &&
+       test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
+       test b3 = $(git notes show) &&
+       git show HEAD^ &&
+       test_must_fail git notes show HEAD^
+'
+
+test_expect_success 'cannot add note where one exists' '
+       ! MSG=b2 git notes add &&
+       test ! -f .git/NOTES_EDITMSG &&
+       test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
+       test b3 = $(git notes show) &&
+       git show HEAD^ &&
+       test_must_fail git notes show HEAD^
+'
+
+test_expect_success 'can overwrite existing note with "git notes add -f"' '
+       MSG=b1 git notes add -f &&
        test ! -f .git/NOTES_EDITMSG &&
        test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
        test b1 = $(git notes show) &&
@@ -89,6 +107,7 @@ test_expect_success 'show notes' '
        git log -1 > output &&
        test_cmp expect output
 '
+
 test_expect_success 'create multi-line notes (setup)' '
        : > a3 &&
        git add a3 &&
@@ -96,7 +115,7 @@ test_expect_success 'create multi-line notes (setup)' '
        git commit -m 3rd &&
        MSG="b3
 c3c3c3c3
-d3d3d3" git notes edit
+d3d3d3" git notes add
 '
 
 cat > expect-multiline << EOF
@@ -125,7 +144,7 @@ test_expect_success 'create -F notes (setup)' '
        test_tick &&
        git commit -m 4th &&
        echo "xyzzy" > note5 &&
-       git notes edit -F note5
+       git notes add -F note5
 '
 
 cat > expect-F << EOF
@@ -205,7 +224,7 @@ test_expect_success 'create -m notes (setup)' '
        git add a5 &&
        test_tick &&
        git commit -m 5th &&
-       git notes edit -m spam -m "foo
+       git notes add -m spam -m "foo
 bar
 baz"
 '
@@ -234,8 +253,8 @@ test_expect_success 'show -m notes' '
        test_cmp expect-m output
 '
 
-test_expect_success 'remove note with -F /dev/null (setup)' '
-       git notes edit -F /dev/null
+test_expect_success 'remove note with add -f -F /dev/null (setup)' '
+       git notes add -f -F /dev/null
 '
 
 cat > expect-rm-F << EOF
@@ -256,7 +275,7 @@ test_expect_success 'verify note removal with -F /dev/null' '
 '
 
 test_expect_success 'do not create empty note with -m "" (setup)' '
-       git notes edit -m ""
+       git notes add -m ""
 '
 
 test_expect_success 'verify non-creation of note with -m ""' '
@@ -292,12 +311,80 @@ test_expect_success 'verify note removal with "git notes remove"' '
        ! git notes show HEAD^
 '
 
+cat > expect << EOF
+c18dc024e14f08d18d14eea0d747ff692d66d6a3 1584215f1d29c65e99c6c6848626553fdd07fd75
+c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061 268048bfb8a1fb38e703baceb8ab235421bf80c5
+EOF
+
+test_expect_success 'list notes with "git notes list"' '
+       git notes list > output &&
+       test_cmp expect output
+'
+
+test_expect_success 'list notes with "git notes"' '
+       git notes > output &&
+       test_cmp expect output
+'
+
+cat > expect << EOF
+c18dc024e14f08d18d14eea0d747ff692d66d6a3
+EOF
+
+test_expect_success 'list specific note with "git notes list <object>"' '
+       git notes list HEAD^^ > output &&
+       test_cmp expect output
+'
+
+cat > expect << EOF
+EOF
+
+test_expect_success 'listing non-existing notes fails' '
+       test_must_fail git notes list HEAD > output &&
+       test_cmp expect output
+'
+
+cat > expect << EOF
+Initial set of notes
+
+More notes appended with git notes append
+EOF
+
+test_expect_success 'append to existing note with "git notes append"' '
+       git notes add -m "Initial set of notes" &&
+       git notes append -m "More notes appended with git notes append" &&
+       git notes show > output &&
+       test_cmp expect output
+'
+
+test_expect_success 'appending empty string does not change existing note' '
+       git notes append -m "" &&
+       git notes show > output &&
+       test_cmp expect output
+'
+
+test_expect_success 'git notes append == add when there is no existing note' '
+       git notes remove HEAD &&
+       test_must_fail git notes list HEAD &&
+       git notes append -m "Initial set of notes
+
+More notes appended with git notes append" &&
+       git notes show > output &&
+       test_cmp expect output
+'
+
+test_expect_success 'appending empty string to non-existing note does not create note' '
+       git notes remove HEAD &&
+       test_must_fail git notes list HEAD &&
+       git notes append -m "" &&
+       test_must_fail git notes list HEAD
+'
+
 test_expect_success 'create other note on a different notes ref (setup)' '
        : > a6 &&
        git add a6 &&
        test_tick &&
        git commit -m 6th &&
-       GIT_NOTES_REF="refs/notes/other" git notes edit -m "other note"
+       GIT_NOTES_REF="refs/notes/other" git notes add -m "other note"
 '
 
 cat > expect-other << EOF
@@ -342,17 +429,17 @@ test_expect_success 'Do not show note when core.notesRef is overridden' '
 
 test_expect_success 'Allow notes on non-commits (trees, blobs, tags)' '
        echo "Note on a tree" > expect
-       git notes edit -m "Note on a tree" HEAD: &&
+       git notes add -m "Note on a tree" HEAD: &&
        git notes show HEAD: > actual &&
        test_cmp expect actual &&
        echo "Note on a blob" > expect
        filename=$(git ls-tree --name-only HEAD | head -n1) &&
-       git notes edit -m "Note on a blob" HEAD:$filename &&
+       git notes add -m "Note on a blob" HEAD:$filename &&
        git notes show HEAD:$filename > actual &&
        test_cmp expect actual &&
        echo "Note on a tag" > expect
        git tag -a -m "This is an annotated tag" foobar HEAD^ &&
-       git notes edit -m "Note on a tag" foobar &&
+       git notes add -m "Note on a tag" foobar &&
        git notes show foobar > actual &&
        test_cmp expect actual
 '