Add selftests verifying concatenation of multiple notes for the same commit
[alt-git.git] / t / t3303-notes-subtrees.sh
blobedc4bc884147f2be2d433a7b57f27c524aa933c7
1 #!/bin/sh
3 test_description='Test commit notes organized in subtrees'
5 . ./test-lib.sh
7 number_of_commits=100
9 start_note_commit () {
10 test_tick &&
11 cat <<INPUT_END
12 commit refs/notes/commits
13 committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
14 data <<COMMIT
15 notes
16 COMMIT
18 from refs/notes/commits^0
19 deleteall
20 INPUT_END
24 verify_notes () {
25 git log | grep "^ " > output &&
26 i=$number_of_commits &&
27 while [ $i -gt 0 ]; do
28 echo " commit #$i" &&
29 echo " note for commit #$i" &&
30 i=$(($i-1));
31 done > expect &&
32 test_cmp expect output
35 test_expect_success "setup: create $number_of_commits commits" '
38 nr=0 &&
39 while [ $nr -lt $number_of_commits ]; do
40 nr=$(($nr+1)) &&
41 test_tick &&
42 cat <<INPUT_END
43 commit refs/heads/master
44 committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
45 data <<COMMIT
46 commit #$nr
47 COMMIT
49 M 644 inline file
50 data <<EOF
51 file in commit #$nr
52 EOF
54 INPUT_END
56 done &&
57 test_tick &&
58 cat <<INPUT_END
59 commit refs/notes/commits
60 committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
61 data <<COMMIT
62 no notes
63 COMMIT
65 deleteall
67 INPUT_END
69 ) |
70 git fast-import --quiet &&
71 git config core.notesRef refs/notes/commits
74 test_sha1_based () {
76 start_note_commit &&
77 nr=$number_of_commits &&
78 git rev-list refs/heads/master |
79 while read sha1; do
80 note_path=$(echo "$sha1" | sed "$1")
81 cat <<INPUT_END &&
82 M 100644 inline $note_path
83 data <<EOF
84 note for commit #$nr
85 EOF
87 INPUT_END
89 nr=$(($nr-1))
90 done
91 ) |
92 git fast-import --quiet
95 test_expect_success 'test notes in 2/38-fanout' 'test_sha1_based "s|^..|&/|"'
96 test_expect_success 'verify notes in 2/38-fanout' 'verify_notes'
98 test_expect_success 'test notes in 4/36-fanout' 'test_sha1_based "s|^....|&/|"'
99 test_expect_success 'verify notes in 4/36-fanout' 'verify_notes'
101 test_expect_success 'test notes in 2/2/36-fanout' 'test_sha1_based "s|^\(..\)\(..\)|\1/\2/|"'
102 test_expect_success 'verify notes in 2/2/36-fanout' 'verify_notes'
104 test_same_notes () {
106 start_note_commit &&
107 nr=$number_of_commits &&
108 git rev-list refs/heads/master |
109 while read sha1; do
110 first_note_path=$(echo "$sha1" | sed "$1")
111 second_note_path=$(echo "$sha1" | sed "$2")
112 cat <<INPUT_END &&
113 M 100644 inline $second_note_path
114 data <<EOF
115 note for commit #$nr
118 M 100644 inline $first_note_path
119 data <<EOF
120 note for commit #$nr
123 INPUT_END
125 nr=$(($nr-1))
126 done
128 git fast-import --quiet
131 test_expect_success 'test same notes in 4/36-fanout and 2/38-fanout' 'test_same_notes "s|^..|&/|" "s|^....|&/|"'
132 test_expect_success 'verify same notes in 4/36-fanout and 2/38-fanout' 'verify_notes'
134 test_expect_success 'test same notes in 2/38-fanout and 2/2/36-fanout' 'test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"'
135 test_expect_success 'verify same notes in 2/38-fanout and 2/2/36-fanout' 'verify_notes'
137 test_expect_success 'test same notes in 4/36-fanout and 2/2/36-fanout' 'test_same_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^....|&/|"'
138 test_expect_success 'verify same notes in 4/36-fanout and 2/2/36-fanout' 'verify_notes'
140 test_concatenated_notes () {
142 start_note_commit &&
143 nr=$number_of_commits &&
144 git rev-list refs/heads/master |
145 while read sha1; do
146 first_note_path=$(echo "$sha1" | sed "$1")
147 second_note_path=$(echo "$sha1" | sed "$2")
148 cat <<INPUT_END &&
149 M 100644 inline $second_note_path
150 data <<EOF
151 second note for commit #$nr
154 M 100644 inline $first_note_path
155 data <<EOF
156 first note for commit #$nr
159 INPUT_END
161 nr=$(($nr-1))
162 done
164 git fast-import --quiet
167 verify_concatenated_notes () {
168 git log | grep "^ " > output &&
169 i=$number_of_commits &&
170 while [ $i -gt 0 ]; do
171 echo " commit #$i" &&
172 echo " first note for commit #$i" &&
173 echo " second note for commit #$i" &&
174 i=$(($i-1));
175 done > expect &&
176 test_cmp expect output
179 test_expect_success 'test notes in 4/36-fanout concatenated with 2/38-fanout' 'test_concatenated_notes "s|^..|&/|" "s|^....|&/|"'
180 test_expect_success 'verify notes in 4/36-fanout concatenated with 2/38-fanout' 'verify_concatenated_notes'
182 test_expect_success 'test notes in 2/38-fanout concatenated with 2/2/36-fanout' 'test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^..|&/|"'
183 test_expect_success 'verify notes in 2/38-fanout concatenated with 2/2/36-fanout' 'verify_concatenated_notes'
185 test_expect_success 'test notes in 4/36-fanout concatenated with 2/2/36-fanout' 'test_concatenated_notes "s|^\(..\)\(..\)|\1/\2/|" "s|^....|&/|"'
186 test_expect_success 'verify notes in 4/36-fanout concatenated with 2/2/36-fanout' 'verify_concatenated_notes'
188 test_done