3 test_description
='git rev-cache tests'
7 # note that we're tip-toeing around the corner case of two objects/names
8 # for the same SHA-1 => discrepencies between cached and non-cached walks
11 test_cmp .tmpfile1 .tmpfile2
14 # we want a totally wacked out branch structure...
15 # we need branching and merging of sizes up through 3, tree
16 # addition/deletion, and enough branching to exercise path
18 test_expect_success
'init repo' '
21 echo watskeburt >amaindir/file &&
23 git commit -m "bla" &&
29 echo bang >d1/filed1 &&
31 git commit -m "blu" &&
33 git checkout master &&
37 git commit -a -m "kaplaa" &&
39 git checkout master &&
41 echo omg >smoke/bong &&
43 git commit -m "omg" &&
50 git commit -m "shazam" &&
51 git merge -m "merge b2" b2 &&
53 echo bam >smoke/pipe &&
55 git commit -m "bam" &&
57 git checkout master &&
60 git commit -m "pow" &&
61 git merge -m "merge b4" b4 &&
64 echo stuff >d1/filed1 &&
65 git commit -a -m "stuff" &&
71 git commit -m "wazzup" &&
75 echo lol >d1/d2/filed2 &&
77 git commit -m "lol" &&
80 git checkout master &&
81 git merge -m "triple merge" b1 b11 &&
84 git commit -a -m "oh noes"
87 max_date
=`git-rev-list --timestamp HEAD~1 --max-count=1 | grep -e "^[0-9]*" -o`
88 min_date
=`git-rev-list --timestamp b4 --max-count=1 | grep -e "^[0-9]*" -o`
90 git-rev-list
--topo-order HEAD
--not HEAD~
3 >proper_commit_list_limited
91 git-rev-list
--topo-order HEAD
--not HEAD~
2 >proper_commit_list_limited2
92 git-rev-list
--topo-order HEAD
>proper_commit_list
93 git-rev-list
--objects HEAD
>proper_object_list
94 git-rev-list HEAD
--max-age=$min_date --min-age=$max_date >proper_list_date_limited
96 cache_sha1
=`git-rev-cache add HEAD 2>output.err`
98 test_expect_success
'make cache slice' '
99 grep "final return value: 0" output.err
102 test_expect_success
'remake cache slice' '
103 git-rev-cache add HEAD 2>output.err &&
104 grep "final return value: 0" output.err
107 #check core mechanics and rev-list hook for commits
108 test_expect_success
'test rev-caches walker directly (limited)' '
109 git-rev-cache walk HEAD --not HEAD~3 >list &&
110 test_cmp_sorted list proper_commit_list_limited
113 test_expect_success
'test rev-caches walker directly (unlimited)' '
114 git-rev-cache walk HEAD >list &&
115 test_cmp_sorted list proper_commit_list
118 test_expect_success
'test rev-list traversal (limited)' '
119 git-rev-list HEAD --not HEAD~3 >list &&
120 test_cmp list proper_commit_list_limited
123 test_expect_success
'test rev-list traversal (unlimited)' '
124 git-rev-list HEAD >list &&
125 test_cmp list proper_commit_list
128 #do the same for objects
129 test_expect_success
'test rev-caches walker with objects' '
130 git-rev-cache walk --objects HEAD >list &&
131 test_cmp_sorted list proper_object_list
134 test_expect_success
'test rev-list with objects (topo order)' '
135 git-rev-list --topo-order --objects HEAD >list &&
136 test_cmp_sorted list proper_object_list
139 test_expect_success
'test rev-list with objects (no order)' '
140 git-rev-list --objects HEAD >list &&
141 test_cmp_sorted list proper_object_list
145 test_expect_success
'test rev-list date limiting (topo order)' '
146 git-rev-list --topo-order --max-age=$min_date --min-age=$max_date HEAD >list &&
147 test_cmp_sorted list proper_list_date_limited
150 test_expect_success
'test rev-list date limiting (no order)' '
151 git-rev-list --max-age=$min_date --min-age=$max_date HEAD >list &&
152 test_cmp_sorted list proper_list_date_limited
155 #check partial cache slice
156 test_expect_success
'saving old cache and generating partial slice' '
157 cp ".git/rev-cache/$cache_sha1" .git/rev-cache/.old &&
158 rm ".git/rev-cache/$cache_sha1" .git/rev-cache/index &&
160 git-rev-cache add HEAD~2 2>output.err &&
161 grep "final return value: 0" output.err
164 test_expect_success
'rev-list with wholly interesting partial slice' '
165 git-rev-list --topo-order HEAD >list &&
166 test_cmp list proper_commit_list
169 test_expect_success
'rev-list with partly uninteresting partial slice' '
170 git-rev-list --topo-order HEAD --not HEAD~3 >list &&
171 test_cmp list proper_commit_list_limited
174 test_expect_success
'rev-list with wholly uninteresting partial slice' '
175 git-rev-list --topo-order HEAD --not HEAD~2 >list &&
176 test_cmp list proper_commit_list_limited2
179 #try out index generation and fuse (note that --all == HEAD in this case)
180 #probably should make a test for that too...
181 test_expect_success
'test (non-)fusion of one slice' '
182 git-rev-cache fuse >output.err &&
183 grep "nothing to fuse" output.err
186 test_expect_success
'make fresh slice' '
187 git-rev-cache add --all --fresh 2>output.err &&
188 grep "final return value: 0" output.err
191 test_expect_success
'check dual slices' '
192 git-rev-list --topo-order HEAD~2 HEAD >list &&
193 test_cmp list proper_commit_list
196 test_expect_success
'regenerate index' '
197 rm .git/rev-cache/index &&
198 git-rev-cache index 2>output.err &&
199 grep "final return value: 0" output.err
202 test_expect_success
'fuse slices' '
203 test -e .git/rev-cache/.old &&
204 git-rev-cache fuse 2>output.err &&
205 grep "final return value: 0" output.err &&
206 test_cmp .git/rev-cache/$cache_sha1 .git/rev-cache/.old
209 #make sure we can smoothly handle corrupted caches
210 test_expect_success
'corrupt slice' '
211 echo bla >.git/rev-cache/$cache_sha1
214 test_expect_success
'test rev-list traversal (limited) (corrupt slice)' '
215 git-rev-list --topo-order HEAD --not HEAD~3 >list &&
216 test_cmp list proper_commit_list_limited
219 test_expect_success
'test rev-list traversal (unlimited) (corrupt slice)' '
220 git-rev-list HEAD >list &&
221 test_cmp_sorted list proper_commit_list
224 test_expect_success
'corrupt index' '
225 echo blu >.git/rev-cache/index
228 test_expect_success
'test rev-list traversal (limited) (corrupt index)' '
229 git-rev-list --topo-order HEAD --not HEAD~3 >list &&
230 test_cmp list proper_commit_list_limited
233 test_expect_success
'test rev-list traversal (unlimited) (corrupt index)' '
234 git-rev-list HEAD >list &&
235 test_cmp_sorted list proper_commit_list
238 #test --ignore-size in fuse
240 cache_sha1
=`git-rev-cache add HEAD~2 2>output.err`
242 test_expect_success
'make fragmented slices' '
243 git-rev-cache add HEAD~1 --not HEAD~2 2>>output.err &&
244 git-rev-cache add HEAD --fresh 2>>output.err &&
245 test `grep "final return value: 0" output.err | wc -l` -eq 3
248 cache_size
=`wc -c .git/rev-cache/$cache_sha1 | grep -o "[0-9]*"`
249 test_expect_success
'test --ignore-size function in fuse' '
250 git-rev-cache fuse --ignore-size=$cache_size 2>output.err &&
251 grep "final return value: 0" output.err &&
252 test -e .git/rev-cache/$cache_sha1