]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config.c: pass ctx in configsets
authorGlen Choo <chooglen@google.com>
Wed, 28 Jun 2023 19:26:23 +0000 (19:26 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 Jun 2023 21:06:39 +0000 (14:06 -0700)
Pass config_context to config callbacks in configset_iter(), trivially
setting the .kvi member to the cached key_value_info. Then, in config
callbacks that are only used with configsets, use the .kvi member to
replace calls to current_config_*(), and delete current_config_line()
because it has no remaining callers.

This leaves builtin/config.c and config.c as the only remaining users of
current_config_*().

Signed-off-by: Glen Choo <chooglen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/remote.c
config.c
config.h
remote.c
t/helper/test-config.c

index 87de81105e203c846b3d07958081e917c27a6443..d47f9ee21cf370a920e523ba20baa80d0929fba4 100644 (file)
@@ -646,17 +646,19 @@ struct push_default_info
 };
 
 static int config_read_push_default(const char *key, const char *value,
-       const struct config_context *ctx UNUSED, void *cb)
+       const struct config_context *ctx, void *cb)
 {
+       const struct key_value_info *kvi = ctx->kvi;
+
        struct push_default_info* info = cb;
        if (strcmp(key, "remote.pushdefault") ||
            !value || strcmp(value, info->old_name))
                return 0;
 
-       info->scope = current_config_scope();
+       info->scope = kvi->scope;
        strbuf_reset(&info->origin);
-       strbuf_addstr(&info->origin, current_config_name());
-       info->linenr = current_config_line();
+       strbuf_addstr(&info->origin, config_origin_type_name(kvi->origin_type));
+       info->linenr = kvi->linenr;
 
        return 0;
 }
index 850e432e301f321e3571cc0849884006104cc703..662d406ac1eca1f1a7fc446f57cc15e964ae9048 100644 (file)
--- a/config.c
+++ b/config.c
@@ -2317,6 +2317,7 @@ static void configset_iter(struct config_reader *reader, struct config_set *set,
        struct string_list *values;
        struct config_set_element *entry;
        struct configset_list *list = &set->list;
+       struct config_context ctx = CONFIG_CONTEXT_INIT;
 
        for (i = 0; i < list->nr; i++) {
                entry = list->items[i].e;
@@ -2324,12 +2325,11 @@ static void configset_iter(struct config_reader *reader, struct config_set *set,
                values = &entry->value_list;
 
                config_reader_set_kvi(reader, values->items[value_index].util);
-
-               if (fn(entry->key, values->items[value_index].string, NULL, data) < 0)
+               ctx.kvi = values->items[value_index].util;
+               if (fn(entry->key, values->items[value_index].string, &ctx, data) < 0)
                        git_die_config_linenr(entry->key,
-                                             reader->config_kvi->filename,
-                                             reader->config_kvi->linenr);
-
+                                             ctx.kvi->filename,
+                                             ctx.kvi->linenr);
                config_reader_set_kvi(reader, NULL);
        }
 }
@@ -3984,13 +3984,8 @@ static int reader_origin_type(struct config_reader *reader,
        return 0;
 }
 
-const char *current_config_origin_type(void)
+const char *config_origin_type_name(enum config_origin_type type)
 {
-       enum config_origin_type type = CONFIG_ORIGIN_UNKNOWN;
-
-       if (reader_origin_type(&the_reader, &type))
-               BUG("current_config_origin_type called outside config callback");
-
        switch (type) {
        case CONFIG_ORIGIN_BLOB:
                return "blob";
@@ -4007,6 +4002,16 @@ const char *current_config_origin_type(void)
        }
 }
 
+const char *current_config_origin_type(void)
+{
+       enum config_origin_type type = CONFIG_ORIGIN_UNKNOWN;
+
+       if (reader_origin_type(&the_reader, &type))
+               BUG("current_config_origin_type called outside config callback");
+
+       return config_origin_type_name(type);
+}
+
 const char *config_scope_name(enum config_scope scope)
 {
        switch (scope) {
@@ -4054,14 +4059,6 @@ enum config_scope current_config_scope(void)
                return the_reader.parsing_scope;
 }
 
-int current_config_line(void)
-{
-       if (the_reader.config_kvi)
-               return the_reader.config_kvi->linenr;
-       else
-               return the_reader.source->linenr;
-}
-
 int lookup_config(const char **mapping, int nr_mapping, const char *var)
 {
        int i;
index cd30125a8a420925440252cf02b8e29edd301871..ddf147bb2d15f157e92036ecfcdfd75da64eea89 100644 (file)
--- a/config.h
+++ b/config.h
@@ -387,7 +387,7 @@ int git_config_parse_parameter(const char *, config_fn_t fn, void *data);
 enum config_scope current_config_scope(void);
 const char *current_config_origin_type(void);
 const char *current_config_name(void);
-int current_config_line(void);
+const char *config_origin_type_name(enum config_origin_type type);
 
 /*
  * Match and parse a config key of the form:
index 241999c2842aa7983445b99ea4740df803d03fc5..1dab860141b3da6d9e402e4d3bef30871a613acb 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -350,7 +350,7 @@ static void read_branches_file(struct remote_state *remote_state,
 }
 
 static int handle_config(const char *key, const char *value,
-                        const struct config_context *ctx UNUSED, void *cb)
+                        const struct config_context *ctx, void *cb)
 {
        const char *name;
        size_t namelen;
@@ -358,6 +358,7 @@ static int handle_config(const char *key, const char *value,
        struct remote *remote;
        struct branch *branch;
        struct remote_state *remote_state = cb;
+       const struct key_value_info *kvi = ctx->kvi;
 
        if (parse_config_key(key, "branch", &name, &namelen, &subkey) >= 0) {
                /* There is no subsection. */
@@ -415,8 +416,8 @@ static int handle_config(const char *key, const char *value,
        }
        remote = make_remote(remote_state, name, namelen);
        remote->origin = REMOTE_CONFIG;
-       if (current_config_scope() == CONFIG_SCOPE_LOCAL ||
-           current_config_scope() == CONFIG_SCOPE_WORKTREE)
+       if (kvi->scope == CONFIG_SCOPE_LOCAL ||
+           kvi->scope == CONFIG_SCOPE_WORKTREE)
                remote->configured_in_repo = 1;
        if (!strcmp(subkey, "mirror"))
                remote->mirror = git_config_bool(key, value);
index 85ad815358ebb2805db5bfa90aa7373207bccdad..3f4c3678318e1762d87239b00c6d2d7ec2d94380 100644 (file)
  */
 
 static int iterate_cb(const char *var, const char *value,
-                     const struct config_context *ctx UNUSED,
+                     const struct config_context *ctx,
                      void *data UNUSED)
 {
+       const struct key_value_info *kvi = ctx->kvi;
        static int nr;
 
        if (nr++)
@@ -53,10 +54,10 @@ static int iterate_cb(const char *var, const char *value,
 
        printf("key=%s\n", var);
        printf("value=%s\n", value ? value : "(null)");
-       printf("origin=%s\n", current_config_origin_type());
-       printf("name=%s\n", current_config_name());
-       printf("lno=%d\n", current_config_line());
-       printf("scope=%s\n", config_scope_name(current_config_scope()));
+       printf("origin=%s\n", config_origin_type_name(kvi->origin_type));
+       printf("name=%s\n", kvi->filename ? kvi->filename : "");
+       printf("lno=%d\n", kvi->linenr);
+       printf("scope=%s\n", config_scope_name(kvi->scope));
 
        return 0;
 }