]> git.ipfire.org Git - thirdparty/git.git/commitdiff
bisect: simplify string_list memory handling
authorJeff King <peff@peff.net>
Thu, 19 Feb 2026 07:57:52 +0000 (08:57 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 19 Feb 2026 18:41:18 +0000 (10:41 -0800)
We declare the refs_for_removal string_list as NODUP, forcing us to
manually allocate strings we insert. And then when it comes time to
clean up, we set strdup_strings so that string_list_clear() will free
them for us.

This is a confusing pattern, and can be done much more simply by just
declaring the list with the DUP initializer in the first place.

It was written this way originally because one of the callsites
generated the item using xstrfmt(). But that spot switched to a plain
xstrdup() in the preceding commit. That means we can now just let the
string_list code handle allocation itself.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
bisect.c

index 4f0d1a185397e024de3b57a265983d7395ba742f..268f5e36f8bba3635bb49b3e51f91b9993537f78 100644 (file)
--- a/bisect.c
+++ b/bisect.c
@@ -1180,8 +1180,7 @@ int estimate_bisect_steps(int all)
 static int mark_for_removal(const struct reference *ref, void *cb_data)
 {
        struct string_list *refs = cb_data;
-       char *bisect_ref = xstrdup(ref->name);
-       string_list_append(refs, bisect_ref);
+       string_list_append(refs, ref->name);
        return 0;
 }
 
@@ -1190,16 +1189,15 @@ int bisect_clean_state(void)
        int result = 0;
 
        /* There may be some refs packed during bisection */
-       struct string_list refs_for_removal = STRING_LIST_INIT_NODUP;
+       struct string_list refs_for_removal = STRING_LIST_INIT_DUP;
        refs_for_each_fullref_in(get_main_ref_store(the_repository),
                                 "refs/bisect/", NULL, mark_for_removal,
                                 &refs_for_removal);
-       string_list_append(&refs_for_removal, xstrdup("BISECT_HEAD"));
-       string_list_append(&refs_for_removal, xstrdup("BISECT_EXPECTED_REV"));
+       string_list_append(&refs_for_removal, "BISECT_HEAD");
+       string_list_append(&refs_for_removal, "BISECT_EXPECTED_REV");
        result = refs_delete_refs(get_main_ref_store(the_repository),
                                  "bisect: remove", &refs_for_removal,
                                  REF_NO_DEREF);
-       refs_for_removal.strdup_strings = 1;
        string_list_clear(&refs_for_removal, 0);
        unlink_or_warn(git_path_bisect_ancestors_ok());
        unlink_or_warn(git_path_bisect_log());