cbb9d35909565d805c6d14c9382341794b3f78d3
   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_done