summaryrefslogtreecommitdiff
path: root/t/t6113-rev-list-bitmap-filters.sh
blob: 4d8e09167e78d078a6c14e7d51e3a9cb0aa7bf89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/sh
 
test_description='rev-list combining bitmaps and filters'
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-bitmap.sh
 
test_expect_success 'set up bitmapped repo' '
	# one commit will have bitmaps, the other will not
	test_commit one &&
	test_commit much-larger-blob-one &&
	git repack -adb &&
	test_commit two &&
	test_commit much-larger-blob-two &&
	git tag tag
'
 
test_expect_success 'filters fallback to non-bitmap traversal' '
	# use a path-based filter, since they are inherently incompatible with
	# bitmaps (i.e., this test will never get confused by later code to
	# combine the features)
	filter=$(echo "!one" | git hash-object -w --stdin) &&
	git rev-list --objects --filter=sparse:oid=$filter HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=sparse:oid=$filter HEAD >actual &&
	test_cmp expect actual
'
 
test_expect_success 'blob:none filter' '
	git rev-list --objects --filter=blob:none HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:none HEAD >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'blob:none filter with specified blob' '
	git rev-list --objects --filter=blob:none HEAD HEAD:two.t >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:none HEAD HEAD:two.t >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'blob:limit filter' '
	git rev-list --objects --filter=blob:limit=5 HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:limit=5 HEAD >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'blob:limit filter with specified blob' '
	git rev-list --objects --filter=blob:limit=5 \
		     HEAD HEAD:much-larger-blob-two.t >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:limit=5 \
		     HEAD HEAD:much-larger-blob-two.t >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'tree:0 filter' '
	git rev-list --objects --filter=tree:0 HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=tree:0 HEAD >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'tree:0 filter with specified blob, tree' '
	git rev-list --objects --filter=tree:0 HEAD HEAD:two.t >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=tree:0 HEAD HEAD:two.t >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'tree:1 filter' '
	git rev-list --objects --filter=tree:1 HEAD >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=tree:1 HEAD >actual &&
	test_cmp expect actual
'
 
test_expect_success 'object:type filter' '
	git rev-list --objects --filter=object:type=tag tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=tag tag >actual &&
	test_cmp expect actual &&
 
	git rev-list --objects --filter=object:type=commit tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=commit tag >actual &&
	test_bitmap_traversal expect actual &&
 
	git rev-list --objects --filter=object:type=tree tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=tree tag >actual &&
	test_bitmap_traversal expect actual &&
 
	git rev-list --objects --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'object:type filter with --filter-provided-objects' '
	git rev-list --objects --filter-provided-objects --filter=object:type=tag tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=tag tag >actual &&
	test_cmp expect actual &&
 
	git rev-list --objects --filter-provided-objects --filter=object:type=commit tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=commit tag >actual &&
	test_bitmap_traversal expect actual &&
 
	git rev-list --objects --filter-provided-objects --filter=object:type=tree tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=tree tag >actual &&
	test_bitmap_traversal expect actual &&
 
	git rev-list --objects --filter-provided-objects --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'combine filter' '
	git rev-list --objects --filter=blob:limit=1000 --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter=blob:limit=1000 --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual
'
 
test_expect_success 'combine filter with --filter-provided-objects' '
	git rev-list --objects --filter-provided-objects --filter=blob:limit=1000 --filter=object:type=blob tag >expect &&
	git rev-list --use-bitmap-index \
		     --objects --filter-provided-objects --filter=blob:limit=1000 --filter=object:type=blob tag >actual &&
	test_bitmap_traversal expect actual &&
 
	git cat-file --batch-check="%(objecttype) %(objectsize)" <actual >objects &&
	while read objecttype objectsize
	do
		test "$objecttype" = blob || return 1
		test "$objectsize" -le 1000 || return 1
	done <objects
'
 
test_done