]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs.h: let `for_each_namespaced_ref()` take excluded patterns
authorTaylor Blau <me@ttaylorr.com>
Mon, 10 Jul 2023 21:12:36 +0000 (17:12 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 10 Jul 2023 21:48:56 +0000 (14:48 -0700)
A future commit will want to call `for_each_namespaced_ref()` with
a list of excluded patterns.

We could introduce a variant of that function, say,
`for_each_namespaced_ref_exclude()` which takes the extra parameter, and
reimplement the original function in terms of that. But all but one
caller (in `http-backend.c`) will supply the new parameter, so add the
new parameter to `for_each_namespaced_ref()` itself instead of
introducing a new function.

For now, supply NULL for the list of excluded patterns at all callers to
avoid changing behavior, which we will do in a future change.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http-backend.c
refs.c
refs.h
upload-pack.c

index ac146d85c54efddf1f7cf01b61aa13ec3b3470e3..ad500683c808ed5f8f8fc5e013aae9d88399c739 100644 (file)
@@ -559,7 +559,7 @@ static void get_info_refs(struct strbuf *hdr, char *arg UNUSED)
 
        } else {
                select_getanyfile(hdr);
-               for_each_namespaced_ref(show_text_ref, &buf);
+               for_each_namespaced_ref(NULL, show_text_ref, &buf);
                send_strbuf(hdr, "text/plain", &buf);
        }
        strbuf_release(&buf);
diff --git a/refs.c b/refs.c
index ec4d5b91011a43cbddd5a4234dc58f88f266d8f6..95a7db9563b1989bab7c9dbb4473aea642d2eb16 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1660,13 +1660,14 @@ int for_each_replace_ref(struct repository *r, each_repo_ref_fn fn, void *cb_dat
                                    DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
 }
 
-int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
+int for_each_namespaced_ref(const char **exclude_patterns,
+                           each_ref_fn fn, void *cb_data)
 {
        struct strbuf buf = STRBUF_INIT;
        int ret;
        strbuf_addf(&buf, "%srefs/", get_git_namespace());
        ret = do_for_each_ref(get_main_ref_store(the_repository),
-                             buf.buf, NULL, fn, 0, 0, cb_data);
+                             buf.buf, exclude_patterns, fn, 0, 0, cb_data);
        strbuf_release(&buf);
        return ret;
 }
diff --git a/refs.h b/refs.h
index 012c0d52132bd303eeec7e3661d6f8792fa5b88b..7152e0a09fff90efde75671c30ea4d3e226e11d7 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -376,7 +376,12 @@ int for_each_glob_ref_in(each_ref_fn fn, const char *pattern,
                         const char *prefix, void *cb_data);
 
 int head_ref_namespaced(each_ref_fn fn, void *cb_data);
-int for_each_namespaced_ref(each_ref_fn fn, void *cb_data);
+/*
+ * references matching any pattern in "exclude_patterns" are omitted from the
+ * result set on a best-effort basis.
+ */
+int for_each_namespaced_ref(const char **exclude_patterns,
+                           each_ref_fn fn, void *cb_data);
 
 /* can be used to learn about broken ref and symref */
 int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data);
index 1a213ed7752b67c5b8dd4db8a0342065388ffdb7..99d216938c2577b1b37126cae298fdb04045c887 100644 (file)
@@ -855,7 +855,7 @@ static void deepen(struct upload_pack_data *data, int depth)
                 * marked with OUR_REF.
                 */
                head_ref_namespaced(check_ref, data);
-               for_each_namespaced_ref(check_ref, data);
+               for_each_namespaced_ref(NULL, check_ref, data);
 
                get_reachable_list(data, &reachable_shallows);
                result = get_shallow_commits(&reachable_shallows,
@@ -1386,7 +1386,7 @@ void upload_pack(const int advertise_refs, const int stateless_rpc,
                if (advertise_refs)
                        data.no_done = 1;
                head_ref_namespaced(send_ref, &data);
-               for_each_namespaced_ref(send_ref, &data);
+               for_each_namespaced_ref(NULL, send_ref, &data);
                if (!data.sent_capabilities) {
                        const char *refname = "capabilities^{}";
                        write_v0_ref(&data, refname, refname, null_oid());
@@ -1400,7 +1400,7 @@ void upload_pack(const int advertise_refs, const int stateless_rpc,
                packet_flush(1);
        } else {
                head_ref_namespaced(check_ref, &data);
-               for_each_namespaced_ref(check_ref, &data);
+               for_each_namespaced_ref(NULL, check_ref, &data);
        }
 
        if (!advertise_refs) {