Skip to content

Commit 8918e37

Browse files
derrickstoleegitster
authored andcommitted
revision: complicated pathspecs disable filters
The changed-path Bloom filters work only when we can compute an explicit Bloom filter key in advance. When a pathspec is given that allows case-insensitive checks or wildcard matching, we must disable the Bloom filter performance checks. By checking the pathspec in prepare_to_use_bloom_filters(), we avoid setting up the Bloom filter data and thus revert to the usual logic. Before this change, the following tests would fail*: t6004-rev-list-path-optim.sh (Tests 6-7) t6130-pathspec-noglob.sh (Tests 3-6) t6131-pathspec-icase.sh (Tests 3-5) *These tests would fail when using GIT_TEST_COMMIT_GRAPH and GIT_TEST_COMMIT_GRAPH_BLOOM_FILTERS except that the latter environment variable was not set up correctly to write the changed- path Bloom filters in the test suite. That will be fixed in the next change. Helped-by: Taylor Blau <[email protected]> Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent caf388c commit 8918e37

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

revision.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,20 @@ static void trace2_bloom_filter_statistics_atexit(void)
650650
jw_release(&jw);
651651
}
652652

653+
static int forbid_bloom_filters(struct pathspec *spec)
654+
{
655+
if (spec->has_wildcard)
656+
return 1;
657+
if (spec->nr > 1)
658+
return 1;
659+
if (spec->magic & ~PATHSPEC_LITERAL)
660+
return 1;
661+
if (spec->nr && (spec->items[0].magic & ~PATHSPEC_LITERAL))
662+
return 1;
663+
664+
return 0;
665+
}
666+
653667
static void prepare_to_use_bloom_filter(struct rev_info *revs)
654668
{
655669
struct pathspec_item *pi;
@@ -659,7 +673,10 @@ static void prepare_to_use_bloom_filter(struct rev_info *revs)
659673
int len;
660674

661675
if (!revs->commits)
662-
return;
676+
return;
677+
678+
if (forbid_bloom_filters(&revs->prune_data))
679+
return;
663680

664681
repo_parse_commit(revs->repo, revs->commits->item);
665682

0 commit comments

Comments
 (0)