t / t3303-notes-subtrees.shon commit merge-one-file: fix broken merges with alternate work trees (6aaeca9)
   1#!/bin/sh
   2
   3test_description='Test commit notes organized in subtrees'
   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 $number_of_commits commits" '
  36
  37        (
  38                nr=0 &&
  39                while [ $nr -lt $number_of_commits ]; do
  40                        nr=$(($nr+1)) &&
  41                        test_tick &&
  42                        cat <<INPUT_END
  43commit refs/heads/master
  44committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  45data <<COMMIT
  46commit #$nr
  47COMMIT
  48
  49M 644 inline file
  50data <<EOF
  51file in commit #$nr
  52EOF
  53
  54INPUT_END
  55
  56                done &&
  57                test_tick &&
  58                cat <<INPUT_END
  59commit refs/notes/commits
  60committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
  61data <<COMMIT
  62no notes
  63COMMIT
  64
  65deleteall
  66
  67INPUT_END
  68
  69        ) |
  70        git fast-import --quiet &&
  71        git config core.notesRef refs/notes/commits
  72'
  73
  74test_sha1_based () {
  75        (
  76                start_note_commit &&
  77                nr=$number_of_commits &&
  78                git rev-list refs/heads/master |
  79                while read sha1; do
  80                        note_path=$(echo "$sha1" | sed "$1")
  81                        cat <<INPUT_END &&
  82M 100644 inline $note_path
  83data <<EOF
  84note for commit #$nr
  85EOF
  86
  87INPUT_END
  88
  89                        nr=$(($nr-1))
  90                done
  91        ) |
  92        git fast-import --quiet
  93}
  94
  95test_expect_success 'test notes in 2/38-fanout' 'test_sha1_based "s|^..|&/|"'
  96test_expect_success 'verify notes in 2/38-fanout' 'verify_notes'
  97
  98test_expect_success 'test notes in 4/36-fanout' 'test_sha1_based "s|^....|&/|"'
  99test_expect_success 'verify notes in 4/36-fanout' 'verify_notes'
 100
 101test_expect_success 'test notes in 2/2/36-fanout' 'test_sha1_based "s|^\(..\)\(..\)|\1/\2/|"'
 102test_expect_success 'verify notes in 2/2/36-fanout' 'verify_notes'
 103
 104test_same_notes () {
 105        (
 106                start_note_commit &&
 107                nr=$number_of_commits &&
 108                git rev-list refs/heads/master |
 109                while read sha1; do
 110                        first_note_path=$(echo "$sha1" | sed "$1")
 111                        second_note_path=$(echo "$sha1" | sed "$2")
 112                        cat <<INPUT_END &&
 113M 100644 inline $second_note_path
 114data <<EOF
 115note for commit #$nr
 116EOF
 117
 118M 100644 inline $first_note_path
 119data <<EOF
 120note for commit #$nr
 121EOF
 122
 123INPUT_END
 124
 125                        nr=$(($nr-1))
 126                done
 127        ) |
 128        git fast-import --quiet
 129}
 130
 131test_expect_success 'test same notes in 4/36-fanout and 2/38-fanout' 'test_same_notes "s|^..|&/|" "s|^....|&/|"'
 132test_expect_success 'verify same notes in 4/36-fanout and 2/38-fanout' 'verify_notes'
 133
 134test_expect_success 'test same notes in 2/38-fanout and 2/2/36-fanout' 'test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"'
 135test_expect_success 'verify same notes in 2/38-fanout and 2/2/36-fanout' 'verify_notes'
 136
 137test_expect_success 'test same notes in 4/36-fanout and 2/2/36-fanout' 'test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^....|&/|"'
 138test_expect_success 'verify same notes in 4/36-fanout and 2/2/36-fanout' 'verify_notes'
 139
 140test_concatenated_notes () {
 141        (
 142                start_note_commit &&
 143                nr=$number_of_commits &&
 144                git rev-list refs/heads/master |
 145                while read sha1; do
 146                        first_note_path=$(echo "$sha1" | sed "$1")
 147                        second_note_path=$(echo "$sha1" | sed "$2")
 148                        cat <<INPUT_END &&
 149M 100644 inline $second_note_path
 150data <<EOF
 151second note for commit #$nr
 152EOF
 153
 154M 100644 inline $first_note_path
 155data <<EOF
 156first note for commit #$nr
 157EOF
 158
 159INPUT_END
 160
 161                        nr=$(($nr-1))
 162                done
 163        ) |
 164        git fast-import --quiet
 165}
 166
 167verify_concatenated_notes () {
 168    git log | grep "^    " > output &&
 169    i=$number_of_commits &&
 170    while [ $i -gt 0 ]; do
 171        echo "    commit #$i" &&
 172        echo "    first note for commit #$i" &&
 173        echo "    second note for commit #$i" &&
 174        i=$(($i-1));
 175    done > expect &&
 176    test_cmp expect output
 177}
 178
 179test_expect_success 'test notes in 4/36-fanout concatenated with 2/38-fanout' 'test_concatenated_notes "s|^..|&/|" "s|^....|&/|"'
 180test_expect_success 'verify notes in 4/36-fanout concatenated with 2/38-fanout' 'verify_concatenated_notes'
 181
 182test_expect_success 'test notes in 2/38-fanout concatenated with 2/2/36-fanout' 'test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"'
 183test_expect_success 'verify notes in 2/38-fanout concatenated with 2/2/36-fanout' 'verify_concatenated_notes'
 184
 185test_expect_success 'test notes in 4/36-fanout concatenated with 2/2/36-fanout' 'test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^....|&/|"'
 186test_expect_success 'verify notes in 4/36-fanout concatenated with 2/2/36-fanout' 'verify_concatenated_notes'
 187
 188test_done