t / t3301-notes.shon commit builtin-notes: Add "list" subcommand for listing note objects (e397421)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Johannes E. Schindelin
   4#
   5
   6test_description='Test commit notes'
   7
   8. ./test-lib.sh
   9
  10cat > fake_editor.sh << \EOF
  11echo "$MSG" > "$1"
  12echo "$MSG" >& 2
  13EOF
  14chmod a+x fake_editor.sh
  15GIT_EDITOR=./fake_editor.sh
  16export GIT_EDITOR
  17
  18test_expect_success 'cannot annotate non-existing HEAD' '
  19        (MSG=3 && export MSG && test_must_fail git notes edit)
  20'
  21
  22test_expect_success setup '
  23        : > a1 &&
  24        git add a1 &&
  25        test_tick &&
  26        git commit -m 1st &&
  27        : > a2 &&
  28        git add a2 &&
  29        test_tick &&
  30        git commit -m 2nd
  31'
  32
  33test_expect_success 'need valid notes ref' '
  34        (MSG=1 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF &&
  35         test_must_fail git notes edit) &&
  36        (MSG=2 GIT_NOTES_REF=/ && export MSG GIT_NOTES_REF &&
  37         test_must_fail git notes show)
  38'
  39
  40test_expect_success 'refusing to edit in refs/heads/' '
  41        (MSG=1 GIT_NOTES_REF=refs/heads/bogus &&
  42         export MSG GIT_NOTES_REF &&
  43         test_must_fail git notes edit)
  44'
  45
  46test_expect_success 'refusing to edit in refs/remotes/' '
  47        (MSG=1 GIT_NOTES_REF=refs/remotes/bogus &&
  48         export MSG GIT_NOTES_REF &&
  49         test_must_fail git notes edit)
  50'
  51
  52# 1 indicates caught gracefully by die, 128 means git-show barked
  53test_expect_success 'handle empty notes gracefully' '
  54        git notes show ; test 1 = $?
  55'
  56
  57test_expect_success 'create notes' '
  58        git config core.notesRef refs/notes/commits &&
  59        MSG=b0 git notes edit &&
  60        test ! -f .git/NOTES_EDITMSG &&
  61        test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
  62        test b0 = $(git notes show) &&
  63        git show HEAD^ &&
  64        test_must_fail git notes show HEAD^
  65'
  66
  67test_expect_success 'edit existing notes' '
  68        MSG=b1 git notes edit &&
  69        test ! -f .git/NOTES_EDITMSG &&
  70        test 1 = $(git ls-tree refs/notes/commits | wc -l) &&
  71        test b1 = $(git notes show) &&
  72        git show HEAD^ &&
  73        test_must_fail git notes show HEAD^
  74'
  75
  76cat > expect << EOF
  77commit 268048bfb8a1fb38e703baceb8ab235421bf80c5
  78Author: A U Thor <author@example.com>
  79Date:   Thu Apr 7 15:14:13 2005 -0700
  80
  81    2nd
  82
  83Notes:
  84    b1
  85EOF
  86
  87test_expect_success 'show notes' '
  88        ! (git cat-file commit HEAD | grep b1) &&
  89        git log -1 > output &&
  90        test_cmp expect output
  91'
  92test_expect_success 'create multi-line notes (setup)' '
  93        : > a3 &&
  94        git add a3 &&
  95        test_tick &&
  96        git commit -m 3rd &&
  97        MSG="b3
  98c3c3c3c3
  99d3d3d3" git notes edit
 100'
 101
 102cat > expect-multiline << EOF
 103commit 1584215f1d29c65e99c6c6848626553fdd07fd75
 104Author: A U Thor <author@example.com>
 105Date:   Thu Apr 7 15:15:13 2005 -0700
 106
 107    3rd
 108
 109Notes:
 110    b3
 111    c3c3c3c3
 112    d3d3d3
 113EOF
 114
 115printf "\n" >> expect-multiline
 116cat expect >> expect-multiline
 117
 118test_expect_success 'show multi-line notes' '
 119        git log -2 > output &&
 120        test_cmp expect-multiline output
 121'
 122test_expect_success 'create -F notes (setup)' '
 123        : > a4 &&
 124        git add a4 &&
 125        test_tick &&
 126        git commit -m 4th &&
 127        echo "xyzzy" > note5 &&
 128        git notes edit -F note5
 129'
 130
 131cat > expect-F << EOF
 132commit 15023535574ded8b1a89052b32673f84cf9582b8
 133Author: A U Thor <author@example.com>
 134Date:   Thu Apr 7 15:16:13 2005 -0700
 135
 136    4th
 137
 138Notes:
 139    xyzzy
 140EOF
 141
 142printf "\n" >> expect-F
 143cat expect-multiline >> expect-F
 144
 145test_expect_success 'show -F notes' '
 146        git log -3 > output &&
 147        test_cmp expect-F output
 148'
 149
 150cat >expect << EOF
 151commit 15023535574ded8b1a89052b32673f84cf9582b8
 152tree e070e3af51011e47b183c33adf9736736a525709
 153parent 1584215f1d29c65e99c6c6848626553fdd07fd75
 154author A U Thor <author@example.com> 1112912173 -0700
 155committer C O Mitter <committer@example.com> 1112912173 -0700
 156
 157    4th
 158EOF
 159test_expect_success 'git log --pretty=raw does not show notes' '
 160        git log -1 --pretty=raw >output &&
 161        test_cmp expect output
 162'
 163
 164cat >>expect <<EOF
 165
 166Notes:
 167    xyzzy
 168EOF
 169test_expect_success 'git log --show-notes' '
 170        git log -1 --pretty=raw --show-notes >output &&
 171        test_cmp expect output
 172'
 173
 174test_expect_success 'git log --no-notes' '
 175        git log -1 --no-notes >output &&
 176        ! grep xyzzy output
 177'
 178
 179test_expect_success 'git format-patch does not show notes' '
 180        git format-patch -1 --stdout >output &&
 181        ! grep xyzzy output
 182'
 183
 184test_expect_success 'git format-patch --show-notes does show notes' '
 185        git format-patch --show-notes -1 --stdout >output &&
 186        grep xyzzy output
 187'
 188
 189for pretty in \
 190        "" --pretty --pretty=raw --pretty=short --pretty=medium \
 191        --pretty=full --pretty=fuller --pretty=format:%s --oneline
 192do
 193        case "$pretty" in
 194        "") p= not= negate="" ;;
 195        ?*) p="$pretty" not=" not" negate="!" ;;
 196        esac
 197        test_expect_success "git show $pretty does$not show notes" '
 198                git show $p >output &&
 199                eval "$negate grep xyzzy output"
 200        '
 201done
 202
 203test_expect_success 'create -m notes (setup)' '
 204        : > a5 &&
 205        git add a5 &&
 206        test_tick &&
 207        git commit -m 5th &&
 208        git notes edit -m spam -m "foo
 209bar
 210baz"
 211'
 212
 213whitespace="    "
 214cat > expect-m << EOF
 215commit bd1753200303d0a0344be813e504253b3d98e74d
 216Author: A U Thor <author@example.com>
 217Date:   Thu Apr 7 15:17:13 2005 -0700
 218
 219    5th
 220
 221Notes:
 222    spam
 223$whitespace
 224    foo
 225    bar
 226    baz
 227EOF
 228
 229printf "\n" >> expect-m
 230cat expect-F >> expect-m
 231
 232test_expect_success 'show -m notes' '
 233        git log -4 > output &&
 234        test_cmp expect-m output
 235'
 236
 237test_expect_success 'remove note with -F /dev/null (setup)' '
 238        git notes edit -F /dev/null
 239'
 240
 241cat > expect-rm-F << EOF
 242commit bd1753200303d0a0344be813e504253b3d98e74d
 243Author: A U Thor <author@example.com>
 244Date:   Thu Apr 7 15:17:13 2005 -0700
 245
 246    5th
 247EOF
 248
 249printf "\n" >> expect-rm-F
 250cat expect-F >> expect-rm-F
 251
 252test_expect_success 'verify note removal with -F /dev/null' '
 253        git log -4 > output &&
 254        test_cmp expect-rm-F output &&
 255        ! git notes show
 256'
 257
 258test_expect_success 'do not create empty note with -m "" (setup)' '
 259        git notes edit -m ""
 260'
 261
 262test_expect_success 'verify non-creation of note with -m ""' '
 263        git log -4 > output &&
 264        test_cmp expect-rm-F output &&
 265        ! git notes show
 266'
 267
 268test_expect_success 'remove note with "git notes remove" (setup)' '
 269        git notes remove HEAD^
 270'
 271
 272cat > expect-rm-remove << EOF
 273commit bd1753200303d0a0344be813e504253b3d98e74d
 274Author: A U Thor <author@example.com>
 275Date:   Thu Apr 7 15:17:13 2005 -0700
 276
 277    5th
 278
 279commit 15023535574ded8b1a89052b32673f84cf9582b8
 280Author: A U Thor <author@example.com>
 281Date:   Thu Apr 7 15:16:13 2005 -0700
 282
 283    4th
 284EOF
 285
 286printf "\n" >> expect-rm-remove
 287cat expect-multiline >> expect-rm-remove
 288
 289test_expect_success 'verify note removal with "git notes remove"' '
 290        git log -4 > output &&
 291        test_cmp expect-rm-remove output &&
 292        ! git notes show HEAD^
 293'
 294
 295cat > expect << EOF
 296c18dc024e14f08d18d14eea0d747ff692d66d6a3 1584215f1d29c65e99c6c6848626553fdd07fd75
 297c9c6af7f78bc47490dbf3e822cf2f3c24d4b9061 268048bfb8a1fb38e703baceb8ab235421bf80c5
 298EOF
 299
 300test_expect_success 'list notes with "git notes list"' '
 301        git notes list > output &&
 302        test_cmp expect output
 303'
 304
 305test_expect_success 'list notes with "git notes"' '
 306        git notes > output &&
 307        test_cmp expect output
 308'
 309
 310cat > expect << EOF
 311c18dc024e14f08d18d14eea0d747ff692d66d6a3
 312EOF
 313
 314test_expect_success 'list specific note with "git notes list <object>"' '
 315        git notes list HEAD^^ > output &&
 316        test_cmp expect output
 317'
 318
 319cat > expect << EOF
 320EOF
 321
 322test_expect_success 'listing non-existing notes fails' '
 323        test_must_fail git notes list HEAD > output &&
 324        test_cmp expect output
 325'
 326
 327test_expect_success 'create other note on a different notes ref (setup)' '
 328        : > a6 &&
 329        git add a6 &&
 330        test_tick &&
 331        git commit -m 6th &&
 332        GIT_NOTES_REF="refs/notes/other" git notes edit -m "other note"
 333'
 334
 335cat > expect-other << EOF
 336commit 387a89921c73d7ed72cd94d179c1c7048ca47756
 337Author: A U Thor <author@example.com>
 338Date:   Thu Apr 7 15:18:13 2005 -0700
 339
 340    6th
 341
 342Notes:
 343    other note
 344EOF
 345
 346cat > expect-not-other << EOF
 347commit 387a89921c73d7ed72cd94d179c1c7048ca47756
 348Author: A U Thor <author@example.com>
 349Date:   Thu Apr 7 15:18:13 2005 -0700
 350
 351    6th
 352EOF
 353
 354test_expect_success 'Do not show note on other ref by default' '
 355        git log -1 > output &&
 356        test_cmp expect-not-other output
 357'
 358
 359test_expect_success 'Do show note when ref is given in GIT_NOTES_REF' '
 360        GIT_NOTES_REF="refs/notes/other" git log -1 > output &&
 361        test_cmp expect-other output
 362'
 363
 364test_expect_success 'Do show note when ref is given in core.notesRef config' '
 365        git config core.notesRef "refs/notes/other" &&
 366        git log -1 > output &&
 367        test_cmp expect-other output
 368'
 369
 370test_expect_success 'Do not show note when core.notesRef is overridden' '
 371        GIT_NOTES_REF="refs/notes/wrong" git log -1 > output &&
 372        test_cmp expect-not-other output
 373'
 374
 375test_expect_success 'Allow notes on non-commits (trees, blobs, tags)' '
 376        echo "Note on a tree" > expect
 377        git notes edit -m "Note on a tree" HEAD: &&
 378        git notes show HEAD: > actual &&
 379        test_cmp expect actual &&
 380        echo "Note on a blob" > expect
 381        filename=$(git ls-tree --name-only HEAD | head -n1) &&
 382        git notes edit -m "Note on a blob" HEAD:$filename &&
 383        git notes show HEAD:$filename > actual &&
 384        test_cmp expect actual &&
 385        echo "Note on a tag" > expect
 386        git tag -a -m "This is an annotated tag" foobar HEAD^ &&
 387        git notes edit -m "Note on a tag" foobar &&
 388        git notes show foobar > actual &&
 389        test_cmp expect actual
 390'
 391
 392test_done