Add selftests verifying: - that we are able to parse notes trees with various fanout schemes - that notes trees with conflicting fanout schemes are parsed as expected Signed-off-by: Johan Herland <johan@xxxxxxxxxxx> --- t/t3303-notes-subtrees.sh | 206 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 206 insertions(+), 0 deletions(-) create mode 100755 t/t3303-notes-subtrees.sh diff --git a/t/t3303-notes-subtrees.sh b/t/t3303-notes-subtrees.sh new file mode 100755 index 0000000..40bb3f4 --- /dev/null +++ b/t/t3303-notes-subtrees.sh @@ -0,0 +1,206 @@ +#!/bin/sh + +test_description='Test commit notes organized in subtrees' + +. ./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)); + 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 +commit refs/heads/master +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_expect_success 'test notes in 2/38-fanout' ' + + ( + start_note_commit && + nr=$number_of_commits && + git rev-list refs/heads/master | + while read sha1; do + note_path=$(echo "$sha1" | sed "s|^..|&/|") + cat <<INPUT_END && +M 100644 inline $note_path +data <<EOF +note for commit #$nr +EOF + +INPUT_END + + nr=$(($nr-1)) + done + ) | + git fast-import --quiet +' + +test_expect_success 'verify notes in 2/38-fanout' 'verify_notes' + +test_expect_success 'test notes in 4/36-fanout' ' + + ( + start_note_commit && + nr=$number_of_commits && + git rev-list refs/heads/master | + while read sha1; do + note_path=$(echo "$sha1" | sed "s|^....|&/|") + cat <<INPUT_END && +M 100644 inline $note_path +data <<EOF +note for commit #$nr +EOF + +INPUT_END + + nr=$(($nr-1)) + done + ) | + git fast-import --quiet +' + +test_expect_success 'verify notes in 4/36-fanout' 'verify_notes' + +test_expect_success 'test notes in 4/36-fanout overriding 2/38-fanout' ' + + ( + start_note_commit && + nr=$number_of_commits && + git rev-list refs/heads/master | + while read sha1; do + ignored_note_path=$(echo "$sha1" | sed "s|^..|&/|") + preferred_note_path=$(echo "$sha1" | sed "s|^....|&/|") + cat <<INPUT_END && +M 100644 inline $ignored_note_path +data <<EOF +IGNORED note for commit #$nr +EOF + +M 100644 inline $preferred_note_path +data <<EOF +note for commit #$nr +EOF + +INPUT_END + + nr=$(($nr-1)) + done + ) | + git fast-import --quiet +' + +test_expect_success 'verify notes in 4/36-fanout overriding 2/38-fanout' 'verify_notes' + +test_expect_success 'test notes in 2/2/36-fanout' ' + + ( + start_note_commit && + nr=$number_of_commits && + git rev-list refs/heads/master | + while read sha1; do + note_path=$(echo "$sha1" | sed "s|^\(..\)\(..\)|\1/\2/|") + cat <<INPUT_END && +M 100644 inline $note_path +data <<EOF +note for commit #$nr +EOF + +INPUT_END + + nr=$(($nr-1)) + done + ) | + git fast-import --quiet +' + +test_expect_success 'verify notes in 2/2/36-fanout' 'verify_notes' + +test_expect_success 'test notes in 2/38-fanout overriding 2/2/36-fanout' ' + + ( + start_note_commit && + nr=$number_of_commits && + git rev-list refs/heads/master | + while read sha1; do + ignored_note_path=$(echo "$sha1" | sed "s|^\(..\)\(..\)|\1/\2/|") + preferred_note_path=$(echo "$sha1" | sed "s|^..|&/|") + cat <<INPUT_END && +M 100644 inline $ignored_note_path +data <<EOF +IGNORED note for commit #$nr +EOF + +M 100644 inline $preferred_note_path +data <<EOF +note for commit #$nr +EOF + +INPUT_END + + nr=$(($nr-1)) + done + ) | + git fast-import --quiet +' + +test_expect_success 'verify notes in 2/38-fanout overriding 2/2/36-fanout' 'verify_notes' + +test_done -- 1.6.4.304.g1365c.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html