From: "Glen Choo via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Jonathan Tan" <jonathantanmy@google.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Emily Shaffer" <nasamuffin@google.com>,
"Glen Choo" <chooglen@google.com>,
"Glen Choo" <chooglen@google.com>
Subject: [PATCH 14/14] config: remove config_reader from configset_add_value
Date: Fri, 21 Apr 2023 19:13:18 +0000 [thread overview]
Message-ID: <33e59152293136e6430cc47e311c1167da167e37.1682104399.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1497.git.git.1682104398.gitgitgadget@gmail.com>
From: Glen Choo <chooglen@google.com>
Since we now get "kvi" from the config callback, we can stop passing it
via "*data". Now "struct config_reader" has no more references, so get
rid of it.
Signed-off-by: Glen Choo <chooglen@google.com>
---
config.c | 81 ++++++++++----------------------------------------------
1 file changed, 14 insertions(+), 67 deletions(-)
diff --git a/config.c b/config.c
index e78de67c452..fbb4aab46cf 100644
--- a/config.c
+++ b/config.c
@@ -59,33 +59,6 @@ struct config_source {
};
#define CONFIG_SOURCE_INIT { 0 }
-struct config_reader {
- struct key_value_info *config_kvi;
-};
-/*
- * Where possible, prefer to accept "struct config_reader" as an arg than to use
- * "the_reader". "the_reader" should only be used if that is infeasible, e.g. in
- * a public function.
- */
-static struct config_reader the_reader;
-
-static inline void config_reader_push_kvi(struct config_reader *reader,
- struct key_value_info *kvi)
-{
- kvi->prev = reader->config_kvi;
- reader->config_kvi = kvi;
-}
-
-static inline struct key_value_info *config_reader_pop_kvi(struct config_reader *reader)
-{
- struct key_value_info *ret;
- if (!reader->config_kvi)
- BUG("tried to pop config_kvi, but we weren't reading config");
- ret = reader->config_kvi;
- reader->config_kvi = reader->config_kvi->prev;
- return ret;
-}
-
static int pack_compression_seen;
static int zlib_compression_seen;
@@ -429,8 +402,6 @@ static int include_condition_is_true(struct key_value_info *kvi,
return 0;
}
-static int kvi_fn(config_fn_t fn, const char *key, const char *value,
- struct key_value_info *kvi, void *data);
static int git_config_include(const char *var, const char *value,
struct key_value_info *kvi, void *data)
{
@@ -443,7 +414,7 @@ static int git_config_include(const char *var, const char *value,
* Pass along all values, including "include" directives; this makes it
* possible to query information on the includes themselves.
*/
- ret = kvi_fn(inc->fn, var, value, kvi, inc->data);
+ ret = inc->fn(var, value, kvi, inc->data);
if (ret < 0)
return ret;
@@ -614,16 +585,6 @@ out_free_ret_1:
return -CONFIG_INVALID_KEY;
}
-static int kvi_fn(config_fn_t fn, const char *key, const char *value,
- struct key_value_info *kvi, void *data)
-{
- int ret;
- config_reader_push_kvi(&the_reader, kvi);
- ret = fn(key, value, kvi, data);
- config_reader_pop_kvi(&the_reader);
- return ret;
-}
-
static int config_parse_pair(const char *key, const char *value,
struct key_value_info *kvi,
config_fn_t fn, void *data)
@@ -636,7 +597,7 @@ static int config_parse_pair(const char *key, const char *value,
if (git_config_parse_key(key, &canonical_name, NULL))
return -1;
- ret = (kvi_fn(fn, canonical_name, value, kvi, data) < 0) ? -1 : 0;
+ ret = (fn(canonical_name, value, kvi, data) < 0) ? -1 : 0;
free(canonical_name);
return ret;
}
@@ -937,7 +898,7 @@ static int get_value(struct config_source *cs, struct key_value_info *kvi,
*/
cs->linenr--;
kvi->linenr = cs->linenr;
- ret = kvi_fn(fn, name->buf, value, kvi, data);
+ ret = fn(name->buf, value, kvi, data);
if (ret >= 0)
cs->linenr++;
return ret;
@@ -2289,8 +2250,8 @@ static void configset_iter(struct config_set *set, config_fn_t fn, void *data)
values = &entry->value_list;
kvi = values->items[value_index].util;
- if (kvi_fn(fn, entry->key, values->items[value_index].string,
- kvi, data) < 0)
+ if (fn(entry->key, values->items[value_index].string, kvi,
+ data) < 0)
git_die_config_linenr(entry->key, kvi->filename,
kvi->linenr);
}
@@ -2368,9 +2329,8 @@ static int configset_find_element(struct config_set *set, const char *key,
return 0;
}
-static int configset_add_value(struct config_reader *reader,
- struct config_set *set, const char *key,
- const char *value)
+static int configset_add_value(struct config_set *set, const char *key,
+ const char *value, struct key_value_info *kvi_p)
{
struct config_set_element *e;
struct string_list_item *si;
@@ -2399,7 +2359,7 @@ static int configset_add_value(struct config_reader *reader,
l_item->e = e;
l_item->value_index = e->value_list.nr - 1;
- memcpy(kv_info, reader->config_kvi, sizeof(struct key_value_info));
+ memcpy(kv_info, kvi_p, sizeof(struct key_value_info));
si->util = kv_info;
return 0;
@@ -2447,26 +2407,19 @@ void git_configset_clear(struct config_set *set)
set->list.items = NULL;
}
-struct configset_add_data {
- struct config_set *config_set;
- struct config_reader *config_reader;
-};
#define CONFIGSET_ADD_INIT { 0 }
static int config_set_callback(const char *key, const char *value,
- struct key_value_info *kvi UNUSED, void *cb)
+ struct key_value_info *kvi, void *cb)
{
- struct configset_add_data *data = cb;
- configset_add_value(data->config_reader, data->config_set, key, value);
+ struct config_set *set = cb;
+ configset_add_value(set, key, value, kvi);
return 0;
}
int git_configset_add_file(struct config_set *set, const char *filename)
{
- struct configset_add_data data = CONFIGSET_ADD_INIT;
- data.config_reader = &the_reader;
- data.config_set = set;
- return git_config_from_file(config_set_callback, filename, &data);
+ return git_config_from_file(config_set_callback, filename, set);
}
int git_configset_get_value(struct config_set *set, const char *key,
@@ -2632,7 +2585,6 @@ int git_configset_get_pathname(struct config_set *set, const char *key, const ch
static void repo_read_config(struct repository *repo)
{
struct config_options opts = { 0 };
- struct configset_add_data data = CONFIGSET_ADD_INIT;
opts.respect_includes = 1;
opts.commondir = repo->commondir;
@@ -2644,10 +2596,8 @@ static void repo_read_config(struct repository *repo)
git_configset_clear(repo->config);
git_configset_init(repo->config);
- data.config_set = repo->config;
- data.config_reader = &the_reader;
- if (config_with_options(config_set_callback, &data, NULL, &opts) < 0)
+ if (config_with_options(config_set_callback, repo->config, NULL, &opts) < 0)
/*
* config_with_options() normally returns only
* zero, as most errors are fatal, and
@@ -2786,12 +2736,9 @@ static void read_protected_config(void)
.ignore_worktree = 1,
.system_gently = 1,
};
- struct configset_add_data data = CONFIGSET_ADD_INIT;
git_configset_init(&protected_config);
- data.config_set = &protected_config;
- data.config_reader = &the_reader;
- config_with_options(config_set_callback, &data, NULL, &opts);
+ config_with_options(config_set_callback, &protected_config, NULL, &opts);
}
void git_protected_config(config_fn_t fn, void *data)
--
gitgitgadget
next prev parent reply other threads:[~2023-04-21 19:14 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-21 19:13 [PATCH 00/14] [RFC] config: remove global state from config iteration Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 01/14] config.c: introduce kvi_fn(), use it for configsets Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 02/14] config.c: use kvi for CLI config Glen Choo via GitGitGadget
2023-05-01 11:06 ` Ævar Arnfjörð Bjarmason
2023-04-21 19:13 ` [PATCH 03/14] config: use kvi for config files Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 04/14] config: add kvi.path, use it to evaluate includes Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 05/14] config: pass source to config_parser_event_fn_t Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 06/14] config: inline git_color_default_config Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 07/14] urlmatch.h: use config_fn_t type Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 08/14] (RFC-only) config: add kvi arg to config_fn_t Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 09/14] (RFC-only) config: apply cocci to config_fn_t implementations Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 10/14] (RFC-only) config: finish config_fn_t refactor Glen Choo via GitGitGadget
2023-05-01 11:19 ` Ævar Arnfjörð Bjarmason
2023-05-05 21:07 ` Jonathan Tan
2023-05-09 22:46 ` Glen Choo
2023-05-11 16:21 ` Jonathan Tan
2023-05-08 21:00 ` Glen Choo
2023-04-21 19:13 ` [PATCH 11/14] config: remove current_config_(line|name|origin_type) Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 12/14] config: remove current_config_scope() Glen Choo via GitGitGadget
2023-04-21 19:13 ` [PATCH 13/14] config: pass kvi to die_bad_number() Glen Choo via GitGitGadget
2023-04-21 19:13 ` Glen Choo via GitGitGadget [this message]
2023-05-30 18:41 ` [PATCH v2 00/14] [RFC] config: remove global state from config iteration Glen Choo via GitGitGadget
2023-05-30 18:41 ` [PATCH v2 01/14] config: inline git_color_default_config Glen Choo via GitGitGadget
2023-05-30 18:42 ` [PATCH v2 02/14] urlmatch.h: use config_fn_t type Glen Choo via GitGitGadget
2023-05-30 18:42 ` [PATCH v2 03/14] (RFC-only) config: add kvi arg to config_fn_t Glen Choo via GitGitGadget
2023-06-01 9:50 ` Phillip Wood
2023-06-01 16:22 ` Glen Choo
2023-06-02 9:54 ` Phillip Wood
2023-06-02 16:46 ` Glen Choo
2023-06-05 9:38 ` Phillip Wood
2023-06-09 23:19 ` Glen Choo
2023-05-30 18:42 ` [PATCH v2 04/14] (RFC-only) config: apply cocci to config_fn_t implementations Glen Choo via GitGitGadget
2023-05-30 18:42 ` [PATCH v2 05/14] (RFC-only) config: finish config_fn_t refactor Glen Choo via GitGitGadget
2023-06-01 22:17 ` Jonathan Tan
2023-05-30 18:42 ` [PATCH v2 06/14] config.c: pass kvi in configsets Glen Choo via GitGitGadget
2023-06-01 22:21 ` Jonathan Tan
2023-05-30 18:42 ` [PATCH v2 07/14] config: provide kvi with config files Glen Choo via GitGitGadget
2023-06-01 22:41 ` Jonathan Tan
2023-06-01 23:54 ` Jonathan Tan
2023-05-30 18:42 ` [PATCH v2 08/14] builtin/config.c: test misuse of format_config() Glen Choo via GitGitGadget
2023-05-30 18:42 ` [PATCH v2 09/14] config.c: provide kvi with CLI config Glen Choo via GitGitGadget
2023-06-01 23:35 ` Jonathan Tan
2023-06-02 17:26 ` Glen Choo
2023-05-30 18:42 ` [PATCH v2 10/14] trace2: plumb config kvi Glen Choo via GitGitGadget
2023-06-01 23:38 ` Jonathan Tan
2023-05-30 18:42 ` [PATCH v2 11/14] config: pass kvi to die_bad_number() Glen Choo via GitGitGadget
2023-06-01 23:48 ` Jonathan Tan
2023-06-02 17:23 ` Glen Choo
2023-05-30 18:42 ` [PATCH v2 12/14] config.c: remove config_reader from configsets Glen Choo via GitGitGadget
2023-05-30 18:42 ` [PATCH v2 13/14] config: add kvi.path, use it to evaluate includes Glen Choo via GitGitGadget
2023-06-02 0:06 ` Jonathan Tan
2023-05-30 18:42 ` [PATCH v2 14/14] config: pass source to config_parser_event_fn_t Glen Choo via GitGitGadget
2023-06-02 0:08 ` Jonathan Tan
2023-06-02 17:20 ` Glen Choo
2023-06-20 19:43 ` [PATCH v3 00/12] config: remove global state from config iteration Glen Choo via GitGitGadget
2023-06-20 19:43 ` [PATCH v3 01/12] config: inline git_color_default_config Glen Choo via GitGitGadget
2023-06-20 21:01 ` Junio C Hamano
2023-06-20 19:43 ` [PATCH v3 02/12] urlmatch.h: use config_fn_t type Glen Choo via GitGitGadget
2023-06-20 21:02 ` Junio C Hamano
2023-06-20 19:43 ` [PATCH v3 03/12] config: add ctx arg to config_fn_t Glen Choo via GitGitGadget
2023-06-20 19:43 ` [PATCH v3 04/12] config.c: pass ctx in configsets Glen Choo via GitGitGadget
2023-06-20 21:19 ` Junio C Hamano
2023-06-20 19:43 ` [PATCH v3 05/12] config: pass ctx with config files Glen Choo via GitGitGadget
2023-06-20 19:43 ` [PATCH v3 06/12] builtin/config.c: test misuse of format_config() Glen Choo via GitGitGadget
2023-06-20 21:35 ` Junio C Hamano
2023-06-20 23:06 ` Glen Choo
2023-06-23 20:32 ` Jonathan Tan
2023-06-24 1:31 ` Jeff King
2023-06-28 17:28 ` Glen Choo
2023-06-20 19:43 ` [PATCH v3 07/12] config.c: pass ctx with CLI config Glen Choo via GitGitGadget
2023-06-23 20:35 ` Jonathan Tan
2023-06-23 21:41 ` Glen Choo
2023-06-20 19:43 ` [PATCH v3 08/12] trace2: plumb config kvi Glen Choo via GitGitGadget
2023-06-23 20:40 ` Jonathan Tan
2023-06-20 19:43 ` [PATCH v3 09/12] config: pass kvi to die_bad_number() Glen Choo via GitGitGadget
2023-06-20 19:43 ` [PATCH v3 10/12] config.c: remove config_reader from configsets Glen Choo via GitGitGadget
2023-06-23 20:57 ` Jonathan Tan
2023-06-23 21:33 ` Junio C Hamano
2023-06-20 19:43 ` [PATCH v3 11/12] config: add kvi.path, use it to evaluate includes Glen Choo via GitGitGadget
2023-06-20 19:43 ` [PATCH v3 12/12] config: pass source to config_parser_event_fn_t Glen Choo via GitGitGadget
2023-06-20 21:46 ` Junio C Hamano
2023-06-21 21:46 ` [PATCH v3 00/12] config: remove global state from config iteration Junio C Hamano
2023-06-21 23:06 ` Glen Choo
2023-06-23 21:02 ` Jonathan Tan
2023-06-23 21:33 ` Junio C Hamano
2023-06-23 21:45 ` Glen Choo
2023-06-26 18:11 ` [PATCH v4 " Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 01/12] config: inline git_color_default_config Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 02/12] urlmatch.h: use config_fn_t type Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 03/12] config: add ctx arg to config_fn_t Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 04/12] config.c: pass ctx in configsets Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 05/12] config: pass ctx with config files Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 06/12] builtin/config.c: test misuse of format_config() Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 07/12] config.c: pass ctx with CLI config Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 08/12] trace2: plumb config kvi Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 09/12] config: pass kvi to die_bad_number() Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 10/12] config.c: remove config_reader from configsets Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 11/12] config: add kvi.path, use it to evaluate includes Glen Choo via GitGitGadget
2023-06-26 18:11 ` [PATCH v4 12/12] config: pass source to config_parser_event_fn_t Glen Choo via GitGitGadget
2023-06-26 20:45 ` [PATCH v4 00/12] config: remove global state from config iteration Junio C Hamano
2023-06-28 19:26 ` [PATCH v5 00/11] " Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 01/11] config: inline git_color_default_config Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 02/11] urlmatch.h: use config_fn_t type Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 03/11] config: add ctx arg to config_fn_t Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 04/11] config.c: pass ctx in configsets Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 05/11] config: pass ctx with config files Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 06/11] config.c: pass ctx with CLI config Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 07/11] trace2: plumb config kvi Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 08/11] config: pass kvi to die_bad_number() Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 09/11] config.c: remove config_reader from configsets Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 10/11] config: add kvi.path, use it to evaluate includes Glen Choo via GitGitGadget
2023-06-28 19:26 ` [PATCH v5 11/11] config: pass source to config_parser_event_fn_t Glen Choo via GitGitGadget
2023-06-28 22:23 ` [PATCH v5 00/11] config: remove global state from config iteration Jonathan Tan
2023-06-28 22:47 ` Junio C Hamano
2023-07-11 18:41 ` Phillip Wood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=33e59152293136e6430cc47e311c1167da167e37.1682104399.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=avarab@gmail.com \
--cc=chooglen@google.com \
--cc=git@vger.kernel.org \
--cc=jonathantanmy@google.com \
--cc=nasamuffin@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).