db5875aa9f
Failures within `for` and `while` loops can go unnoticed if not detected and signaled manually since the loop itself does not abort when a contained command fails, nor will a failure necessarily be detected when the loop finishes since the loop returns the exit code of the last command it ran on the final iteration, which may not be the command which failed. Therefore, detect and signal failures manually within loops using the idiom `|| return 1` (or `|| exit 1` within subshells). Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
199 lines
5.1 KiB
Bash
Executable File
199 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-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
|