summaryrefslogtreecommitdiff
path: root/bloom.c
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2020-07-01 13:27:23 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-07-01 21:17:43 (GMT)
commit949197420e3da13c06c6a15fd4b4ed3120753c42 (patch)
tree7d3f979f256acf64d4db492688199951b3532766 /bloom.c
parent7b671f8c2b6b7de511fd2f6587e4540c25764b61 (diff)
downloadgit-949197420e3da13c06c6a15fd4b4ed3120753c42.zip
git-949197420e3da13c06c6a15fd4b4ed3120753c42.tar.gz
git-949197420e3da13c06c6a15fd4b4ed3120753c42.tar.bz2
bloom: fix logic in get_bloom_filter()
The get_bloom_filter() method is a bit complicated in some parts where it does not need to be. In particular, it needs to return a NULL filter only when compute_if_not_present is zero AND the filter data cannot be loaded from a commit-graph file. This currently happens by accident because the commit-graph does not load changed-path Bloom filters from an existing commit-graph when writing a new one. This will change in a later patch. Also clean up some style issues while we are here. One side-effect of returning a NULL filter is that the filters that are reported as "too large" will now be reported as NULL insead of length zero. This case was not properly covered before, so add a test. Further, remote the counting of the zero-length filters from revision.c and the trace2 logs. Helped-by: René Scharfe <l.s.r@web.de> Helped-by: SZEDER Gábor <szeder.dev@gmail.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'bloom.c')
-rw-r--r--bloom.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/bloom.c b/bloom.c
index c38d1cf..2af5389 100644
--- a/bloom.c
+++ b/bloom.c
@@ -186,7 +186,7 @@ struct bloom_filter *get_bloom_filter(struct repository *r,
struct diff_options diffopt;
int max_changes = 512;
- if (bloom_filters.slab_size == 0)
+ if (!bloom_filters.slab_size)
return NULL;
filter = bloom_filter_slab_at(&bloom_filters, c);
@@ -194,16 +194,14 @@ struct bloom_filter *get_bloom_filter(struct repository *r,
if (!filter->data) {
load_commit_graph_info(r, c);
if (c->graph_pos != COMMIT_NOT_FROM_GRAPH &&
- r->objects->commit_graph->chunk_bloom_indexes) {
- if (load_bloom_filter_from_graph(r->objects->commit_graph, filter, c))
- return filter;
- else
- return NULL;
- }
+ r->objects->commit_graph->chunk_bloom_indexes)
+ load_bloom_filter_from_graph(r->objects->commit_graph, filter, c);
}
- if (filter->data || !compute_if_not_present)
+ if (filter->data)
return filter;
+ if (!compute_if_not_present)
+ return NULL;
repo_diff_setup(r, &diffopt);
diffopt.flags.recursive = 1;