4f4b18497a
Broken &&-chains in the test scripts have been corrected. * es/test-chain-lint: t6000-t9999: detect and signal failure within loop t5000-t5999: detect and signal failure within loop t4000-t4999: detect and signal failure within loop t0000-t3999: detect and signal failure within loop tests: simplify by dropping unnecessary `for` loops tests: apply modern idiom for exiting loop upon failure tests: apply modern idiom for signaling test failure tests: fix broken &&-chains in `{...}` groups tests: fix broken &&-chains in `$(...)` command substitutions tests: fix broken &&-chains in compound statements tests: use test_write_lines() to generate line-oriented output tests: simplify construction of large blocks of text t9107: use shell parameter expansion to avoid breaking &&-chain t6300: make `%(raw:size) --shell` test more robust t5516: drop unnecessary subshell and command invocation t4202: clarify intent by creating expected content less cleverly t1020: avoid aborting entire test script when one test fails t1010: fix unnoticed failure on Windows t/lib-pager: use sane_unset() to avoid breaking &&-chain
200 lines
5.1 KiB
Bash
Executable File
200 lines
5.1 KiB
Bash
Executable File
#!/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_PASSES_SANITIZE_LEAK=true
|
|
. ./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 |
|
|
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
|
|
) |
|
|
git fast-import --quiet
|
|
}
|
|
|
|
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
|