| #!/bin/sh | |
| test_description='Test commit notes organized in subtrees' | |
| GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main | |
| export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME | |
| . ./test-lib.sh | |
| number_of_commits=100 | |
| start_note_commit () { | |
| test_tick && | |
| cat <<INPUT_END | |
| commit refs/notes/commits | |
| committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE | |
| data <<COMMIT | |
| notes | |
| COMMIT | |
| from refs/notes/commits^0 | |
| deleteall | |
| INPUT_END | |
| } | |
| verify_notes () { | |
| git log | grep "^ " > output && | |
| i=$number_of_commits && | |
| while [ $i -gt 0 ]; do | |
| echo " commit #$i" && | |
| echo " note for commit #$i" && | |
| i=$(($i-1)) || return 1 | |
| done > expect && | |
| test_cmp expect output | |
| } | |
| test_expect_success "setup: create $number_of_commits commits" ' | |
| ( | |
| nr=0 && | |
| while [ $nr -lt $number_of_commits ]; do | |
| nr=$(($nr+1)) && | |
| test_tick && | |
| cat <<INPUT_END || return 1 | |
| commit refs/heads/main | |
| committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE | |
| data <<COMMIT | |
| commit #$nr | |
| COMMIT | |
| M 644 inline file | |
| data <<EOF | |
| file in commit #$nr | |
| EOF | |
| INPUT_END | |
| done && | |
| test_tick && | |
| cat <<INPUT_END | |
| commit refs/notes/commits | |
| committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE | |
| data <<COMMIT | |
| no notes | |
| COMMIT | |
| deleteall | |
| INPUT_END | |
| ) | | |
| git fast-import --quiet && | |
| git config core.notesRef refs/notes/commits | |
| ' | |
| test_sha1_based () { | |
| ( | |
| start_note_commit && | |
| nr=$number_of_commits && | |
| git rev-list refs/heads/main >out && | |
| while read sha1; do | |
| note_path=$(echo "$sha1" | sed "$1") | |
| cat <<INPUT_END && | |
| M 100644 inline $note_path | |
| data <<EOF | |
| note for commit #$nr | |
| EOF | |
| INPUT_END | |
| nr=$(($nr-1)) | |
| done <out | |
| ) >gfi && | |
| git fast-import --quiet <gfi | |
| } | |
| test_expect_success 'test notes in 2/38-fanout' 'test_sha1_based "s|^..|&/|"' | |
| test_expect_success 'verify notes in 2/38-fanout' 'verify_notes' | |
| test_expect_success 'test notes in 2/2/36-fanout' 'test_sha1_based "s|^\(..\)\(..\)|\1/\2/|"' | |
| test_expect_success 'verify notes in 2/2/36-fanout' 'verify_notes' | |
| test_expect_success 'test notes in 2/2/2/34-fanout' 'test_sha1_based "s|^\(..\)\(..\)\(..\)|\1/\2/\3/|"' | |
| test_expect_success 'verify notes in 2/2/2/34-fanout' 'verify_notes' | |
| test_same_notes () { | |
| ( | |
| start_note_commit && | |
| nr=$number_of_commits && | |
| git rev-list refs/heads/main | | |
| while read sha1; do | |
| first_note_path=$(echo "$sha1" | sed "$1") | |
| second_note_path=$(echo "$sha1" | sed "$2") | |
| cat <<INPUT_END && | |
| M 100644 inline $second_note_path | |
| data <<EOF | |
| note for commit #$nr | |
| EOF | |
| M 100644 inline $first_note_path | |
| data <<EOF | |
| note for commit #$nr | |
| EOF | |
| INPUT_END | |
| nr=$(($nr-1)) | |
| done | |
| ) | | |
| git fast-import --quiet | |
| } | |
| test_expect_success 'test same notes in no fanout and 2/38-fanout' 'test_same_notes "s|^..|&/|" ""' | |
| test_expect_success 'verify same notes in no fanout and 2/38-fanout' 'verify_notes' | |
| test_expect_success 'test same notes in no fanout and 2/2/36-fanout' 'test_same_notes "s|^\(..\)\(..\)|\1/\2/|" ""' | |
| test_expect_success 'verify same notes in no fanout and 2/2/36-fanout' 'verify_notes' | |
| test_expect_success 'test same notes in 2/38-fanout and 2/2/36-fanout' 'test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"' | |
| test_expect_success 'verify same notes in 2/38-fanout and 2/2/36-fanout' 'verify_notes' | |
| test_expect_success 'test same notes in 2/2/2/34-fanout and 2/2/36-fanout' 'test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^\(..\)\(..\)\(..\)|\1/\2/\3/|"' | |
| test_expect_success 'verify same notes in 2/2/2/34-fanout and 2/2/36-fanout' 'verify_notes' | |
| test_concatenated_notes () { | |
| ( | |
| start_note_commit && | |
| nr=$number_of_commits && | |
| git rev-list refs/heads/main | | |
| while read sha1; do | |
| first_note_path=$(echo "$sha1" | sed "$1") | |
| second_note_path=$(echo "$sha1" | sed "$2") | |
| cat <<INPUT_END && | |
| M 100644 inline $second_note_path | |
| data <<EOF | |
| second note for commit #$nr | |
| EOF | |
| M 100644 inline $first_note_path | |
| data <<EOF | |
| first note for commit #$nr | |
| EOF | |
| INPUT_END | |
| nr=$(($nr-1)) | |
| done | |
| ) | | |
| git fast-import --quiet | |
| } | |
| verify_concatenated_notes () { | |
| git log | grep "^ " > output && | |
| i=$number_of_commits && | |
| while [ $i -gt 0 ]; do | |
| echo " commit #$i" && | |
| echo " first note for commit #$i" && | |
| echo " " && | |
| echo " second note for commit #$i" && | |
| i=$(($i-1)) || return 1 | |
| done > expect && | |
| test_cmp expect output | |
| } | |
| test_expect_success 'test notes in no fanout concatenated with 2/38-fanout' 'test_concatenated_notes "s|^..|&/|" ""' | |
| test_expect_success 'verify notes in no fanout concatenated with 2/38-fanout' 'verify_concatenated_notes' | |
| test_expect_success 'test notes in no fanout concatenated with 2/2/36-fanout' 'test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" ""' | |
| test_expect_success 'verify notes in no fanout concatenated with 2/2/36-fanout' 'verify_concatenated_notes' | |
| test_expect_success 'test notes in 2/38-fanout concatenated with 2/2/36-fanout' 'test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"' | |
| test_expect_success 'verify notes in 2/38-fanout concatenated with 2/2/36-fanout' 'verify_concatenated_notes' | |
| test_expect_success 'test notes in 2/2/36-fanout concatenated with 2/2/2/34-fanout' 'test_concatenated_notes "s|^\(..\)\(..\)\(..\)|\1/\2/\3/|" "s|^\(..\)\(..\)|\1/\2/|"' | |
| test_expect_success 'verify notes in 2/2/36-fanout concatenated with 2/2/2/34-fanout' 'verify_concatenated_notes' | |
| test_done |