t / t3304-notes-mixed.shon commit push: --follow-tags (c2aba15)
   1#!/bin/sh
   2
   3test_description='Test notes trees that also contain non-notes'
   4
   5. ./test-lib.sh
   6
   7number_of_commits=100
   8
   9start_note_commit () {
  10        test_tick &&
  11        cat <<INPUT_END
  12commit refs/notes/commits
  13committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  14data <<COMMIT
  15notes
  16COMMIT
  17
  18from refs/notes/commits^0
  19deleteall
  20INPUT_END
  21
  22}
  23
  24verify_notes () {
  25        git log | grep "^    " > output &&
  26        i=$number_of_commits &&
  27        while [ $i -gt 0 ]; do
  28                echo "    commit #$i" &&
  29                echo "    note for commit #$i" &&
  30                i=$(($i-1));
  31        done > expect &&
  32        test_cmp expect output
  33}
  34
  35test_expect_success "setup: create a couple of commits" '
  36
  37        test_tick &&
  38        cat <<INPUT_END >input &&
  39commit refs/heads/master
  40committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  41data <<COMMIT
  42commit #1
  43COMMIT
  44
  45M 644 inline file
  46data <<EOF
  47file in commit #1
  48EOF
  49
  50INPUT_END
  51
  52        test_tick &&
  53        cat <<INPUT_END >>input &&
  54commit refs/heads/master
  55committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  56data <<COMMIT
  57commit #2
  58COMMIT
  59
  60M 644 inline file
  61data <<EOF
  62file in commit #2
  63EOF
  64
  65INPUT_END
  66        git fast-import --quiet <input
  67'
  68
  69test_expect_success "create a notes tree with both notes and non-notes" '
  70
  71        commit1=$(git rev-parse refs/heads/master^) &&
  72        commit2=$(git rev-parse refs/heads/master) &&
  73        test_tick &&
  74        cat <<INPUT_END >input &&
  75commit refs/notes/commits
  76committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  77data <<COMMIT
  78notes commit #1
  79COMMIT
  80
  81N inline $commit1
  82data <<EOF
  83note for commit #1
  84EOF
  85
  86N inline $commit2
  87data <<EOF
  88note for commit #2
  89EOF
  90
  91INPUT_END
  92        test_tick &&
  93        cat <<INPUT_END >>input &&
  94commit refs/notes/commits
  95committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  96data <<COMMIT
  97notes commit #2
  98COMMIT
  99
 100M 644 inline foobar/non-note.txt
 101data <<EOF
 102A non-note in a notes tree
 103EOF
 104
 105N inline $commit2
 106data <<EOF
 107edited note for commit #2
 108EOF
 109
 110INPUT_END
 111        test_tick &&
 112        cat <<INPUT_END >>input &&
 113commit refs/notes/commits
 114committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
 115data <<COMMIT
 116notes commit #3
 117COMMIT
 118
 119N inline $commit1
 120data <<EOF
 121edited note for commit #1
 122EOF
 123
 124M 644 inline deadbeef
 125data <<EOF
 126non-note with SHA1-like name
 127EOF
 128
 129M 644 inline de/adbeef
 130data <<EOF
 131another non-note with SHA1-like name
 132EOF
 133
 134M 644 inline de/adbeefdeadbeefdeadbeefdeadbeefdeadbeef
 135data <<EOF
 136This is actually a valid note, albeit to a non-existing object.
 137It is needed in order to trigger the "mishandling" of the dead/beef non-note.
 138EOF
 139
 140M 644 inline dead/beef
 141data <<EOF
 142yet another non-note with SHA1-like name
 143EOF
 144
 145INPUT_END
 146        git fast-import --quiet <input &&
 147        git config core.notesRef refs/notes/commits
 148'
 149
 150cat >expect <<EXPECT_END
 151    commit #2
 152    edited note for commit #2
 153    commit #1
 154    edited note for commit #1
 155EXPECT_END
 156
 157test_expect_success "verify contents of notes" '
 158
 159        git log | grep "^    " > actual &&
 160        test_cmp expect actual
 161'
 162
 163cat >expect_nn1 <<EXPECT_END
 164A non-note in a notes tree
 165EXPECT_END
 166cat >expect_nn2 <<EXPECT_END
 167non-note with SHA1-like name
 168EXPECT_END
 169cat >expect_nn3 <<EXPECT_END
 170another non-note with SHA1-like name
 171EXPECT_END
 172cat >expect_nn4 <<EXPECT_END
 173yet another non-note with SHA1-like name
 174EXPECT_END
 175
 176test_expect_success "verify contents of non-notes" '
 177
 178        git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 &&
 179        test_cmp expect_nn1 actual_nn1 &&
 180        git cat-file -p refs/notes/commits:deadbeef > actual_nn2 &&
 181        test_cmp expect_nn2 actual_nn2 &&
 182        git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 &&
 183        test_cmp expect_nn3 actual_nn3 &&
 184        git cat-file -p refs/notes/commits:dead/beef > actual_nn4 &&
 185        test_cmp expect_nn4 actual_nn4
 186'
 187
 188test_expect_success "git-notes preserves non-notes" '
 189
 190        test_tick &&
 191        git notes add -f -m "foo bar"
 192'
 193
 194test_expect_success "verify contents of non-notes after git-notes" '
 195
 196        git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 &&
 197        test_cmp expect_nn1 actual_nn1 &&
 198        git cat-file -p refs/notes/commits:deadbeef > actual_nn2 &&
 199        test_cmp expect_nn2 actual_nn2 &&
 200        git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 &&
 201        test_cmp expect_nn3 actual_nn3 &&
 202        git cat-file -p refs/notes/commits:dead/beef > actual_nn4 &&
 203        test_cmp expect_nn4 actual_nn4
 204'
 205
 206test_done