180
struct bloom_filter *get_or_compute_bloom_filter(struct repository *r,
181
struct commit *c,
182
int compute_if_not_present,
183
+ const struct bloom_filter_settings *settings,
184
enum bloom_filter_computed *computed)
185
{
186
struct bloom_filter *filter;
186
- struct bloom_filter_settings settings = DEFAULT_BLOOM_FILTER_SETTINGS;
187
int i;
188
struct diff_options diffopt;
189
- int max_changes = 512;
189
190
if (computed)
191
*computed = BLOOM_NOT_COMPUTED;
210
repo_diff_setup(r, &diffopt);
211
diffopt.flags.recursive = 1;
212
diffopt.detect_rename = 0;
214
- diffopt.max_changes = max_changes;
213
+ diffopt.max_changes = settings->max_changed_paths;
214
diff_setup_done(&diffopt);
215
216
/* ensure commit is parsed so we have parent information */
222
diff_tree_oid(NULL, &c->object.oid, "", &diffopt);
223
diffcore_std(&diffopt);
224
226
- if (diffopt.num_changes <= max_changes) {
225
+ if (diffopt.num_changes <= settings->max_changed_paths) {
226
struct hashmap pathmap;
227
struct pathmap_hash_entry *e;
228
struct hashmap_iter iter;
259
diff_free_filepair(diff_queued_diff.queue[i]);
260
}
261
263
- filter->len = (hashmap_get_size(&pathmap) * settings.bits_per_entry + BITS_PER_WORD - 1) / BITS_PER_WORD;
262
+ filter->len = (hashmap_get_size(&pathmap) * settings->bits_per_entry + BITS_PER_WORD - 1) / BITS_PER_WORD;
263
filter->data = xcalloc(filter->len, sizeof(unsigned char));
264
265
hashmap_for_each_entry(&pathmap, &iter, e, entry) {
266
struct bloom_key key;
268
- fill_bloom_key(e->path, strlen(e->path), &key, &settings);
269
- add_key_to_filter(&key, filter, &settings);
267
+ fill_bloom_key(e->path, strlen(e->path), &key, settings);
268
+ add_key_to_filter(&key, filter, settings);
269
}
270
271
hashmap_free_entries(&pathmap, struct pathmap_hash_entry, entry);