]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: replace `refs_for_each_glob_ref_in()`
authorPatrick Steinhardt <ps@pks.im>
Mon, 23 Feb 2026 11:59:48 +0000 (12:59 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 23 Feb 2026 21:21:19 +0000 (13:21 -0800)
Replace calls to `refs_for_each_glob_ref_in()` with the newly introduced
`refs_for_each_ref_ext()` function.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/bisect.c
builtin/rev-parse.c
refs.c
refs.h
revision.c

index 4cc118fb57df59dcb4b799550e82b703c26968b0..4520e585d0677f1dee3da8c8b4511fff67060e4c 100644 (file)
@@ -422,13 +422,17 @@ static void bisect_status(struct bisect_state *state,
 {
        char *bad_ref = xstrfmt("refs/bisect/%s", terms->term_bad);
        char *good_glob = xstrfmt("%s-*", terms->term_good);
+       struct refs_for_each_ref_options opts = {
+               .pattern = good_glob,
+               .prefix = "refs/bisect/",
+               .trim_prefix = strlen("refs/bisect/"),
+       };
 
        if (refs_ref_exists(get_main_ref_store(the_repository), bad_ref))
                state->nr_bad = 1;
 
-       refs_for_each_glob_ref_in(get_main_ref_store(the_repository), inc_nr,
-                                 good_glob, "refs/bisect/",
-                                 (void *) &state->nr_good);
+       refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                             inc_nr, &state->nr_good, &opts);
 
        free(good_glob);
        free(bad_ref);
@@ -562,6 +566,10 @@ static int add_bisect_ref(const struct reference *ref, void *cb)
 
 static int prepare_revs(struct bisect_terms *terms, struct rev_info *revs)
 {
+       struct refs_for_each_ref_options opts = {
+               .prefix = "refs/bisect/",
+               .trim_prefix = strlen("refs/bisect/"),
+       };
        int res = 0;
        struct add_bisect_ref_data cb = { revs };
        char *good = xstrfmt("%s-*", terms->term_good);
@@ -581,11 +589,16 @@ static int prepare_revs(struct bisect_terms *terms, struct rev_info *revs)
        reset_revision_walk();
        repo_init_revisions(the_repository, revs, NULL);
        setup_revisions(0, NULL, revs, NULL);
-       refs_for_each_glob_ref_in(get_main_ref_store(the_repository),
-                                 add_bisect_ref, bad, "refs/bisect/", &cb);
+
+       opts.pattern = bad;
+       refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                             add_bisect_ref, &cb, &opts);
+
        cb.object_flags = UNINTERESTING;
-       refs_for_each_glob_ref_in(get_main_ref_store(the_repository),
-                                 add_bisect_ref, good, "refs/bisect/", &cb);
+       opts.pattern = good;
+       refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                             add_bisect_ref, &cb, &opts);
+
        if (prepare_revision_walk(revs))
                res = error(_("revision walk setup failed"));
 
@@ -1191,10 +1204,14 @@ static int verify_good(const struct bisect_terms *terms, const char *command)
        char *good_glob = xstrfmt("%s-*", terms->term_good);
        int no_checkout = refs_ref_exists(get_main_ref_store(the_repository),
                                          "BISECT_HEAD");
+       struct refs_for_each_ref_options opts = {
+               .pattern = good_glob,
+               .prefix = "refs/bisect/",
+               .trim_prefix = strlen("refs/bisect/"),
+       };
 
-       refs_for_each_glob_ref_in(get_main_ref_store(the_repository),
-                                 get_first_good, good_glob, "refs/bisect/",
-                                 &good_rev);
+       refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                             get_first_good, &good_rev, &opts);
        free(good_glob);
 
        if (refs_read_ref(get_main_ref_store(the_repository), no_checkout ? "BISECT_HEAD" : "HEAD", &current_rev))
index 02703f2fb889873efba95f39992375d9a2cda05f..61a3f0fdb99b360ad500746832adaf15d349722d 100644 (file)
@@ -614,9 +614,13 @@ static int opt_with_value(const char *arg, const char *opt, const char **value)
 static void handle_ref_opt(const char *pattern, const char *prefix)
 {
        if (pattern) {
-               refs_for_each_glob_ref_in(get_main_ref_store(the_repository),
-                                         show_reference, pattern, prefix,
-                                         NULL);
+               struct refs_for_each_ref_options opts = {
+                       .pattern = pattern,
+                       .prefix = prefix,
+                       .trim_prefix = prefix ? strlen(prefix) : 0,
+               };
+               refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                                     show_reference, NULL, &opts);
        } else {
                struct refs_for_each_ref_options opts = {
                        .prefix = prefix,
diff --git a/refs.c b/refs.c
index 172d4cf941f464077045866d692d6b6ad54774cf..b4ef4ffff05729f0cabf031440bd70f7c69674ff 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -607,17 +607,6 @@ void normalize_glob_ref(struct string_list_item *item, const char *prefix,
        strbuf_release(&normalized_pattern);
 }
 
-int refs_for_each_glob_ref_in(struct ref_store *refs, refs_for_each_cb cb,
-                             const char *pattern, const char *prefix, void *cb_data)
-{
-       struct refs_for_each_ref_options opts = {
-               .pattern = pattern,
-               .prefix = prefix,
-               .trim_prefix = prefix ? strlen(prefix) : 0,
-       };
-       return refs_for_each_ref_ext(refs, cb, cb_data, &opts);
-}
-
 int refs_for_each_glob_ref(struct ref_store *refs, refs_for_each_cb cb,
                           const char *pattern, void *cb_data)
 {
diff --git a/refs.h b/refs.h
index 673d4ccce50d61999667d63a91346f6040af5fda..3fa2c11c1f1d258ad5978498dcf7cfd0cad2a956 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -531,9 +531,6 @@ int refs_for_each_ref_in_prefixes(struct ref_store *refs,
 int refs_for_each_glob_ref(struct ref_store *refs, refs_for_each_cb fn,
                           const char *pattern, void *cb_data);
 
-int refs_for_each_glob_ref_in(struct ref_store *refs, refs_for_each_cb fn,
-                             const char *pattern, const char *prefix, void *cb_data);
-
 /*
  * references matching any pattern in "exclude_patterns" are omitted from the
  * result set on a best-effort basis.
index 8c206830d5e4a6fc208e70ba73923a73fcf4ffba..074a75b859c59272a1a1458dd1057a38cf973226 100644 (file)
@@ -2827,34 +2827,46 @@ static int handle_revision_pseudo_opt(struct rev_info *revs,
                exclude_hidden_refs(&revs->ref_excludes, optarg);
                return argcount;
        } else if (skip_prefix(arg, "--branches=", &optarg)) {
+               struct refs_for_each_ref_options opts = {
+                       .prefix = "refs/heads/",
+                       .trim_prefix = strlen("refs/heads/"),
+                       .pattern = optarg,
+               };
                struct all_refs_cb cb;
                if (revs->ref_excludes.hidden_refs_configured)
                        return error(_("options '%s' and '%s' cannot be used together"),
                                     "--exclude-hidden", "--branches");
                init_all_refs_cb(&cb, revs, *flags);
-               refs_for_each_glob_ref_in(get_main_ref_store(the_repository),
-                                         handle_one_ref, optarg,
-                                         "refs/heads/", &cb);
+               refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                                     handle_one_ref, &cb, &opts);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (skip_prefix(arg, "--tags=", &optarg)) {
+               struct refs_for_each_ref_options opts = {
+                       .prefix = "refs/tags/",
+                       .trim_prefix = strlen("refs/tags/"),
+                       .pattern = optarg,
+               };
                struct all_refs_cb cb;
                if (revs->ref_excludes.hidden_refs_configured)
                        return error(_("options '%s' and '%s' cannot be used together"),
                                     "--exclude-hidden", "--tags");
                init_all_refs_cb(&cb, revs, *flags);
-               refs_for_each_glob_ref_in(get_main_ref_store(the_repository),
-                                         handle_one_ref, optarg,
-                                         "refs/tags/", &cb);
+               refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                                     handle_one_ref, &cb, &opts);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (skip_prefix(arg, "--remotes=", &optarg)) {
+               struct refs_for_each_ref_options opts = {
+                       .prefix = "refs/remotes/",
+                       .trim_prefix = strlen("refs/remotes/"),
+                       .pattern = optarg,
+               };
                struct all_refs_cb cb;
                if (revs->ref_excludes.hidden_refs_configured)
                        return error(_("options '%s' and '%s' cannot be used together"),
                                     "--exclude-hidden", "--remotes");
                init_all_refs_cb(&cb, revs, *flags);
-               refs_for_each_glob_ref_in(get_main_ref_store(the_repository),
-                                         handle_one_ref, optarg,
-                                         "refs/remotes/", &cb);
+               refs_for_each_ref_ext(get_main_ref_store(the_repository),
+                                     handle_one_ref, &cb, &opts);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (!strcmp(arg, "--reflog")) {
                add_reflogs_to_pending(revs, *flags);