diff options
| author | Patrick Steinhardt <ps@pks.im> | 2026-02-19 08:57:49 +0100 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2026-02-19 10:41:18 -0800 |
| commit | ed693078e988adf66c969feb6de9f83c7abe7d24 (patch) | |
| tree | fb588e873c70c3d15b125d2f5e144e4e918cdb31 /pack-bitmap.c | |
| parent | ea717645d199f6f1b66058886475db3e8c9330e9 (diff) | |
| download | git-ed693078e988adf66c969feb6de9f83c7abe7d24.tar.xz | |
pack-bitmap: deduplicate logic to iterate over preferred bitmap tips
We have two locations that iterate over the preferred bitmap tips as
configured by the user via "pack.preferBitmapTips". Both of these
callsites are subtly wrong: when the preferred bitmap tips contain an
exact refname match, then we will hit a `BUG()`.
Prepare for the fix by unifying the two callsites into a new
`for_each_preferred_bitmap_tip()` function.
This removes the last callsite of `bitmap_preferred_tips()` outside of
"pack-bitmap.c". As such, convert the function to be local to that file
only. Note that the function is still used by a second caller, so we
cannot just inline it.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pack-bitmap.c')
| -rw-r--r-- | pack-bitmap.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/pack-bitmap.c b/pack-bitmap.c index 972203f12b..2f5cb34009 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -3314,7 +3314,7 @@ int bitmap_is_midx(struct bitmap_index *bitmap_git) return !!bitmap_git->midx; } -const struct string_list *bitmap_preferred_tips(struct repository *r) +static const struct string_list *bitmap_preferred_tips(struct repository *r) { const struct string_list *dest; @@ -3323,6 +3323,22 @@ const struct string_list *bitmap_preferred_tips(struct repository *r) return NULL; } +void for_each_preferred_bitmap_tip(struct repository *repo, + each_ref_fn cb, void *cb_data) +{ + struct string_list_item *item; + const struct string_list *preferred_tips; + + preferred_tips = bitmap_preferred_tips(repo); + if (!preferred_tips) + return; + + for_each_string_list_item(item, preferred_tips) { + refs_for_each_ref_in(get_main_ref_store(repo), + item->string, cb, cb_data); + } +} + int bitmap_is_preferred_refname(struct repository *r, const char *refname) { const struct string_list *preferred_tips = bitmap_preferred_tips(r); |
