From: Glen Choo <chooglen@xxxxxxxxxx> Trivially replace current_config_(line|name|origin_type) by reading the corresponding values from "struct key_value_info". This includes some light "kvi" plumbing for builtin/config.c, and for *origin_type, splitting out a function that turns "enum config_origin_type" into the human-readable string that callbacks actually want. Signed-off-by: Glen Choo <chooglen@xxxxxxxxxx> --- builtin/config.c | 25 +++++++++++++------------ builtin/remote.c | 6 +++--- config.c | 23 +---------------------- config.h | 4 +--- t/helper/test-config.c | 8 ++++---- 5 files changed, 22 insertions(+), 44 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index b2ad7351d0a..2ffa25139c6 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -191,16 +191,16 @@ static void check_argc(int argc, int min, int max) usage_builtin_config(); } -static void show_config_origin(struct strbuf *buf) +static void show_config_origin(struct key_value_info *kvi, struct strbuf *buf) { const char term = end_nul ? '\0' : '\t'; - strbuf_addstr(buf, current_config_origin_type()); + strbuf_addstr(buf, config_origin_type_name(kvi->origin_type)); strbuf_addch(buf, ':'); if (end_nul) - strbuf_addstr(buf, current_config_name()); + strbuf_addstr(buf, kvi->filename ? kvi->filename : ""); else - quote_c_style(current_config_name(), buf, NULL, 0); + quote_c_style(kvi->filename ? kvi->filename : "", buf, NULL, 0); strbuf_addch(buf, term); } @@ -214,14 +214,14 @@ static void show_config_scope(struct strbuf *buf) } static int show_all_config(const char *key_, const char *value_, - struct key_value_info *kvi UNUSED, void *cb UNUSED) + struct key_value_info *kvi, void *cb UNUSED) { if (show_origin || show_scope) { struct strbuf buf = STRBUF_INIT; if (show_scope) show_config_scope(&buf); if (show_origin) - show_config_origin(&buf); + show_config_origin(kvi, &buf); /* Use fwrite as "buf" can contain \0's if "end_null" is set. */ fwrite(buf.buf, 1, buf.len, stdout); strbuf_release(&buf); @@ -239,12 +239,13 @@ struct strbuf_list { int alloc; }; -static int format_config(struct strbuf *buf, const char *key_, const char *value_) +static int format_config(struct strbuf *buf, const char *key_, const char *value_, + struct key_value_info *kvi) { if (show_scope) show_config_scope(buf); if (show_origin) - show_config_origin(buf); + show_config_origin(kvi, buf); if (show_keys) strbuf_addstr(buf, key_); if (!omit_values) { @@ -299,7 +300,7 @@ static int format_config(struct strbuf *buf, const char *key_, const char *value } static int collect_config(const char *key_, const char *value_, - struct key_value_info *kvi UNUSED, void *cb) + struct key_value_info *kvi, void *cb) { struct strbuf_list *values = cb; @@ -316,7 +317,7 @@ static int collect_config(const char *key_, const char *value_, ALLOC_GROW(values->items, values->nr + 1, values->alloc); strbuf_init(&values->items[values->nr], 0); - return format_config(&values->items[values->nr++], key_, value_); + return format_config(&values->items[values->nr++], key_, value_, kvi); } static int get_value(const char *key_, const char *regex_, unsigned flags) @@ -381,7 +382,7 @@ static int get_value(const char *key_, const char *regex_, unsigned flags) ALLOC_GROW(values.items, values.nr + 1, values.alloc); item = &values.items[values.nr++]; strbuf_init(item, 0); - if (format_config(item, key_, default_value) < 0) + if (format_config(item, key_, default_value, NULL) < 0) die(_("failed to format default config value: %s"), default_value); } @@ -618,7 +619,7 @@ static int get_urlmatch(const char *var, const char *url) struct strbuf buf = STRBUF_INIT; format_config(&buf, item->string, - matched->value_is_null ? NULL : matched->value.buf); + matched->value_is_null ? NULL : matched->value.buf, NULL); fwrite(buf.buf, 1, buf.len, stdout); strbuf_release(&buf); diff --git a/builtin/remote.c b/builtin/remote.c index edb4a9ddd7f..fc4ea993ebb 100644 --- a/builtin/remote.c +++ b/builtin/remote.c @@ -646,7 +646,7 @@ struct push_default_info }; static int config_read_push_default(const char *key, const char *value, - struct key_value_info *kvi UNUSED, void *cb) + struct key_value_info *kvi, void *cb) { struct push_default_info* info = cb; if (strcmp(key, "remote.pushdefault") || @@ -655,8 +655,8 @@ static int config_read_push_default(const char *key, const char *value, info->scope = current_config_scope(); strbuf_reset(&info->origin); - strbuf_addstr(&info->origin, current_config_name()); - info->linenr = current_config_line(); + strbuf_addstr(&info->origin, kvi->filename); + info->linenr = kvi->linenr; return 0; } diff --git a/config.c b/config.c index aa183f6f244..0a5443243dc 100644 --- a/config.c +++ b/config.c @@ -3917,13 +3917,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"; @@ -3969,14 +3964,6 @@ static int reader_config_name(struct config_reader *reader, const char **out) return 0; } -const char *current_config_name(void) -{ - const char *name; - if (reader_config_name(&the_reader, &name)) - BUG("current_config_name called outside config callback"); - return name ? name : ""; -} - enum config_scope current_config_scope(void) { if (the_reader.config_kvi) @@ -3991,14 +3978,6 @@ enum config_scope current_config_scope(void) return CONFIG_SCOPE_UNKNOWN; } -int current_config_line(void) -{ - if (the_reader.config_kvi) - return the_reader.config_kvi->linenr; - else - BUG("current_config_line called outside config callback"); -} - int lookup_config(const char **mapping, int nr_mapping, const char *var) { int i; diff --git a/config.h b/config.h index e4893e237e1..fb16c4aca77 100644 --- a/config.h +++ b/config.h @@ -375,9 +375,7 @@ void git_global_config(char **user, char **xdg); 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: diff --git a/t/helper/test-config.c b/t/helper/test-config.c index 00cd49e5145..337587df41d 100644 --- a/t/helper/test-config.c +++ b/t/helper/test-config.c @@ -43,7 +43,7 @@ */ static int iterate_cb(const char *var, const char *value, - struct key_value_info *kvi UNUSED, void *data UNUSED) + struct key_value_info *kvi, void *data UNUSED) { static int nr; @@ -52,9 +52,9 @@ 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("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(current_config_scope())); return 0; -- gitgitgadget