From 57bc4cb31c67e03db901c860db19fd9a98561654 Mon Sep 17 00:00:00 2001 From: Toon Claes Date: Fri, 7 Aug 2026 20:26:52 +0200 Subject: [PATCH] last-modified: keep per-path Bloom filters for wildcard pathspecs The last-modified builtin expands the pathspec to a set of literal paths and builds a Bloom key for each. During the walk it looks those keys up in the commit's filter to decide whether the commit is worth diffing. These lookups need `bloom_filter_settings` for the key hashing. prepare_revision_walk() runs prepare_to_use_bloom_filter() to build the pathspec key vectors. For a pathspec that cannot be turned into a Bloom key, such as a top-level wildcard like "*.c", that function gives up and clears `bloom_filter_settings`. Restore `bloom_filter_settings` after prepare_revision_walk() so the per-path check keeps working for wildcard pathspecs. Signed-off-by: Toon Claes Signed-off-by: Junio C Hamano --- builtin/last-modified.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/builtin/last-modified.c b/builtin/last-modified.c index 5678731a04..35d9dccd9b 100644 --- a/builtin/last-modified.c +++ b/builtin/last-modified.c @@ -369,6 +369,14 @@ static int last_modified_run(struct last_modified *lm) prepare_revision_walk(&lm->rev); + /* + * prepare_revision_walk() clears bloom_filter_settings for pathspecs + * without a Bloom key. Restore it so the per-path check keeps working. + */ + if (!lm->rev.bloom_filter_settings) + lm->rev.bloom_filter_settings = + get_bloom_filter_settings(lm->rev.repo); + max_count = lm->rev.max_count; init_active_paths_for_commit(&lm->active_paths);