]> git.ipfire.org Git - thirdparty/git.git/commit
ref-filter: add ref_format_clear() function
authorJeff King <peff@peff.net>
Mon, 9 Sep 2024 23:21:18 +0000 (19:21 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Sep 2024 23:26:11 +0000 (16:26 -0700)
commitdb629c61f0be3665a36750fe2353b9ee958b0376
treef825574355c43dbded14d148c86d1d64e9a51fc7
parentf046127b6682f98d41bb4d26164da7f1a4a8e8d0
ref-filter: add ref_format_clear() function

After using the ref-filter API, callers should use ref_filter_clear() to
free any used memory. However, there's not a matching function to clear
the ref_format struct.

Traditionally this did not need to be cleaned up, as it was just a way
for the caller to store and pass format options as a single unit. Even
though the parsing step of some placeholders may allocate data, that's
usually inside their "used_atom" structs, which are part of the
ref_filter itself.

But a few placeholders keep data outside of there. The %(ahead-behind)
and %(is-base) parsers both keep a master list of bases, because they
perform a single filtering pass outside of the use of any particular
atom. And since the format parser does not have access to the ref_filter
struct, they store their cross-atom data in the ref_format struct
itself.

And thus when they are finished, the ref_format also needs to be cleaned
up. So let's add a function to do so, and call it from all of the users
of the ref-filter API.

The %(is-base) case is found by running LSan on t6300. After this patch,
the script can now be marked leak-free.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/branch.c
builtin/for-each-ref.c
builtin/tag.c
builtin/verify-tag.c
ref-filter.c
ref-filter.h
t/t6300-for-each-ref.sh