pack-bitmap: implement combined filter
When the user has multiple objects filters specified, then this is internally represented by having a "combined" filter. These combined filters aren't yet supported by bitmap indices and can thus not be accelerated. Fix this by implementing support for these combined filters. The implementation is quite trivial: when there's a combined filter, we simply recurse into `filter_bitmap()` for all of the sub-filters. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7ab6aafa58
commit
169a15ebd6
@ -966,6 +966,16 @@ static int filter_bitmap(struct bitmap_index *bitmap_git,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (filter->choice == LOFC_COMBINE) {
|
||||
int i;
|
||||
for (i = 0; i < filter->sub_nr; i++) {
|
||||
if (filter_bitmap(bitmap_git, tip_objects, to_filter,
|
||||
&filter->sub[i]) < 0)
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* filter choice not handled */
|
||||
return -1;
|
||||
}
|
||||
|
@ -98,4 +98,11 @@ test_expect_success 'object:type filter' '
|
||||
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_done
|
||||
|
Loading…
Reference in New Issue
Block a user