Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 207 lines (167 sloc) 4.256 kb
#!/bin/sh
test_description='Test notes trees that also contain non-notes'
. ./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/master
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/master
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/master^) &&
commit2=$(git rev-parse refs/heads/master) &&
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
Jump to Line
Something went wrong with that request. Please try again.