]> git.ipfire.org Git - thirdparty/git.git/commitdiff
promisor-remote: add 'local_name' to 'struct promisor_info'
authorChristian Couder <christian.couder@gmail.com>
Wed, 27 May 2026 14:08:16 +0000 (16:08 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 May 2026 20:20:15 +0000 (05:20 +0900)
In a following commit, we will store promisor remote information under
a remote name different than the one the server advertised.

To prepare for this change, let's add a new 'char *local_name' member
to 'struct promisor_info', and let's update the related functions.

While at it, let's also add a small promisor_info_local_name() helper
that returns `local_name` when set, `name` otherwise, and let's use
this small helper in promisor_store_advertised_fields() and in the
post-loop of filter_promisor_remote() so that lookups against the local
repo configuration use the right name.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
promisor-remote.c

index 38fa05054227f6caf1e53b0659376615ea6951de..138a41289350d646ef4b1dd525f2e6b6215b0e4c 100644 (file)
@@ -434,13 +434,14 @@ static struct string_list *fields_stored(void)
  * Struct for promisor remotes involved in the "promisor-remote"
  * protocol capability.
  *
- * Except for "name", each <member> in this struct and its <value>
- * should correspond (either on the client side or on the server side)
- * to a "remote.<name>.<member>" config variable set to <value> where
- * "<name>" is a promisor remote name.
+ * Except for "name" and "local_name", each <member> in this struct
+ * and its <value> should correspond (either on the client side or on
+ * the server side) to a "remote.<name>.<member>" config variable set
+ * to <value> where "<name>" is a promisor remote name.
  */
 struct promisor_info {
-       const char *name;
+       const char *name;       /* name the server advertised */
+       const char *local_name; /* name used locally (may be auto-generated) */
        const char *url;
        const char *filter;
        const char *token;
@@ -449,6 +450,7 @@ struct promisor_info {
 static void promisor_info_free(struct promisor_info *p)
 {
        free((char *)p->name);
+       free((char *)p->local_name);
        free((char *)p->url);
        free((char *)p->filter);
        free((char *)p->token);
@@ -462,6 +464,11 @@ static void promisor_info_list_clear(struct string_list *list)
        string_list_clear(list, 0);
 }
 
+static const char *promisor_info_local_name(struct promisor_info *p)
+{
+       return p->local_name ? p->local_name : p->name;
+}
+
 static void set_one_field(struct promisor_info *p,
                          const char *field, const char *value)
 {
@@ -829,7 +836,7 @@ static bool promisor_store_advertised_fields(struct promisor_info *advertised,
 {
        struct promisor_info *p;
        struct string_list_item *item;
-       const char *remote_name = advertised->name;
+       const char *remote_name = promisor_info_local_name(advertised);
        bool reload_config = false;
 
        if (!(store_info->store_filter || store_info->store_token))
@@ -937,7 +944,8 @@ static void filter_promisor_remote(struct repository *repo,
        /* Apply accepted remotes to the stable repo state */
        for_each_string_list_item(item, accepted_remotes) {
                struct promisor_info *info = item->util;
-               struct promisor_remote *r = repo_promisor_remote_find(repo, info->name);
+               const char *remote_name = promisor_info_local_name(info);
+               struct promisor_remote *r = repo_promisor_remote_find(repo, remote_name);
 
                if (r) {
                        r->accepted = 1;