[PATCH 1/3] revision: complicated pathspecs disable filters
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Apr 11, 2020, 01:02 UTC
- Message-ID
- <9cc31c289aa785f026eec84452ed68e80505d95e.1586566981.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.609.git.1586566981.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>
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.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com> --- revision.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/revision.c b/revision.c index 2b06ee739c8..e37b5b06108 100644 --- a/revision.c +++ b/revision.c @@ -661,6 +661,15 @@ static void prepare_to_use_bloom_filter(struct rev_info *revs) if (!revs->commits) return; + if (revs->prune_data.has_wildcard) + return; + if (revs->prune_data.nr > 1) + return; + if (revs->prune_data.magic || + (revs->prune_data.nr && + revs->prune_data.items[0].magic)) + return; + repo_parse_commit(revs->repo, revs->commits->item); if (!revs->repo->objects->commit_graph)
-- gitgitgadget