t / t3304-notes-mixed.shon commit merge-one-file: fix broken merges with alternate work trees (6aaeca9)
   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
 134INPUT_END
 135        git fast-import --quiet <input &&
 136        git config core.notesRef refs/notes/commits
 137'
 138
 139cat >expect <<EXPECT_END
 140    commit #2
 141    edited note for commit #2
 142    commit #1
 143    edited note for commit #1
 144EXPECT_END
 145
 146test_expect_success "verify contents of notes" '
 147
 148        git log | grep "^    " > actual &&
 149        test_cmp expect actual
 150'
 151
 152cat >expect_nn1 <<EXPECT_END
 153A non-note in a notes tree
 154EXPECT_END
 155cat >expect_nn2 <<EXPECT_END
 156non-note with SHA1-like name
 157EXPECT_END
 158cat >expect_nn3 <<EXPECT_END
 159another non-note with SHA1-like name
 160EXPECT_END
 161
 162test_expect_success "verify contents of non-notes" '
 163
 164        git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 &&
 165        test_cmp expect_nn1 actual_nn1 &&
 166        git cat-file -p refs/notes/commits:deadbeef > actual_nn2 &&
 167        test_cmp expect_nn2 actual_nn2 &&
 168        git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 &&
 169        test_cmp expect_nn3 actual_nn3
 170'
 171
 172test_done