You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
4.3 KiB
210 lines
4.3 KiB
#!/bin/sh |
|
|
|
test_description='Test notes trees that also contain non-notes' |
|
|
|
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)); |
|
done > expect && |
|
test_cmp expect output |
|
} |
|
|
|
test_expect_success "setup: create a couple of commits" ' |
|
|
|
test_tick && |
|
cat <<INPUT_END >input && |
|
commit refs/heads/main |
|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE |
|
data <<COMMIT |
|
commit #1 |
|
COMMIT |
|
|
|
M 644 inline file |
|
data <<EOF |
|
file in commit #1 |
|
EOF |
|
|
|
INPUT_END |
|
|
|
test_tick && |
|
cat <<INPUT_END >>input && |
|
commit refs/heads/main |
|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE |
|
data <<COMMIT |
|
commit #2 |
|
COMMIT |
|
|
|
M 644 inline file |
|
data <<EOF |
|
file in commit #2 |
|
EOF |
|
|
|
INPUT_END |
|
git fast-import --quiet <input |
|
' |
|
|
|
test_expect_success "create a notes tree with both notes and non-notes" ' |
|
|
|
commit1=$(git rev-parse refs/heads/main^) && |
|
commit2=$(git rev-parse refs/heads/main) && |
|
test_tick && |
|
cat <<INPUT_END >input && |
|
commit refs/notes/commits |
|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE |
|
data <<COMMIT |
|
notes commit #1 |
|
COMMIT |
|
|
|
N inline $commit1 |
|
data <<EOF |
|
note for commit #1 |
|
EOF |
|
|
|
N inline $commit2 |
|
data <<EOF |
|
note for commit #2 |
|
EOF |
|
|
|
INPUT_END |
|
test_tick && |
|
cat <<INPUT_END >>input && |
|
commit refs/notes/commits |
|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE |
|
data <<COMMIT |
|
notes commit #2 |
|
COMMIT |
|
|
|
M 644 inline foobar/non-note.txt |
|
data <<EOF |
|
A non-note in a notes tree |
|
EOF |
|
|
|
N inline $commit2 |
|
data <<EOF |
|
edited note for commit #2 |
|
EOF |
|
|
|
INPUT_END |
|
test_tick && |
|
cat <<INPUT_END >>input && |
|
commit refs/notes/commits |
|
committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE |
|
data <<COMMIT |
|
notes commit #3 |
|
COMMIT |
|
|
|
N inline $commit1 |
|
data <<EOF |
|
edited note for commit #1 |
|
EOF |
|
|
|
M 644 inline deadbeef |
|
data <<EOF |
|
non-note with SHA1-like name |
|
EOF |
|
|
|
M 644 inline de/adbeef |
|
data <<EOF |
|
another non-note with SHA1-like name |
|
EOF |
|
|
|
M 644 inline de/adbeefdeadbeefdeadbeefdeadbeefdeadbeef |
|
data <<EOF |
|
This is actually a valid note, albeit to a non-existing object. |
|
It is needed in order to trigger the "mishandling" of the dead/beef non-note. |
|
EOF |
|
|
|
M 644 inline dead/beef |
|
data <<EOF |
|
yet another non-note with SHA1-like name |
|
EOF |
|
|
|
INPUT_END |
|
git fast-import --quiet <input && |
|
git config core.notesRef refs/notes/commits |
|
' |
|
|
|
cat >expect <<EXPECT_END |
|
commit #2 |
|
edited note for commit #2 |
|
commit #1 |
|
edited note for commit #1 |
|
EXPECT_END |
|
|
|
test_expect_success "verify contents of notes" ' |
|
|
|
git log | grep "^ " > actual && |
|
test_cmp expect actual |
|
' |
|
|
|
cat >expect_nn1 <<EXPECT_END |
|
A non-note in a notes tree |
|
EXPECT_END |
|
cat >expect_nn2 <<EXPECT_END |
|
non-note with SHA1-like name |
|
EXPECT_END |
|
cat >expect_nn3 <<EXPECT_END |
|
another non-note with SHA1-like name |
|
EXPECT_END |
|
cat >expect_nn4 <<EXPECT_END |
|
yet another non-note with SHA1-like name |
|
EXPECT_END |
|
|
|
test_expect_success "verify contents of non-notes" ' |
|
|
|
git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 && |
|
test_cmp expect_nn1 actual_nn1 && |
|
git cat-file -p refs/notes/commits:deadbeef > actual_nn2 && |
|
test_cmp expect_nn2 actual_nn2 && |
|
git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 && |
|
test_cmp expect_nn3 actual_nn3 && |
|
git cat-file -p refs/notes/commits:dead/beef > actual_nn4 && |
|
test_cmp expect_nn4 actual_nn4 |
|
' |
|
|
|
test_expect_success "git-notes preserves non-notes" ' |
|
|
|
test_tick && |
|
git notes add -f -m "foo bar" |
|
' |
|
|
|
test_expect_success "verify contents of non-notes after git-notes" ' |
|
|
|
git cat-file -p refs/notes/commits:foobar/non-note.txt > actual_nn1 && |
|
test_cmp expect_nn1 actual_nn1 && |
|
git cat-file -p refs/notes/commits:deadbeef > actual_nn2 && |
|
test_cmp expect_nn2 actual_nn2 && |
|
git cat-file -p refs/notes/commits:de/adbeef > actual_nn3 && |
|
test_cmp expect_nn3 actual_nn3 && |
|
git cat-file -p refs/notes/commits:dead/beef > actual_nn4 && |
|
test_cmp expect_nn4 actual_nn4 |
|
' |
|
|
|
test_done
|
|
|