diff options
| author | Derrick Stolee <stolee@gmail.com> | 2026-02-23 12:26:54 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2026-02-23 13:23:41 -0800 |
| commit | 645f92a3e9179ebf1ed42dc4fa05cc8dd71e3e9c (patch) | |
| tree | aa0dbd2a064f60ae3c6300ee454feac35dd5fa06 | |
| parent | 2d4ab5a885f365cb66156ff4553f88c000dfa307 (diff) | |
| download | git-645f92a3e9179ebf1ed42dc4fa05cc8dd71e3e9c.tar.xz | |
config: restructure format_config()
The recent changes have replaced the bodies of most if/else-if cases
with simple helper method calls. This makes it easy to adapt the
structure into a clearer switch statement, leaving a simple if/else in
the default case.
Make things a little simpler to read by reducing the nesting depth via a
new goto statement when we want to skip values.
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rw-r--r-- | builtin/config.c | 62 |
1 files changed, 44 insertions, 18 deletions
diff --git a/builtin/config.c b/builtin/config.c index 45304076dc..2e8bc6590c 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -124,6 +124,7 @@ struct config_display_options { .key_delim = ' ', \ } +#define TYPE_NONE 0 #define TYPE_BOOL 1 #define TYPE_INT 2 #define TYPE_BOOL_OR_INT 3 @@ -390,32 +391,57 @@ static int format_config(const struct config_display_options *opts, show_config_origin(opts, kvi, buf); if (opts->show_keys) strbuf_addstr(buf, key_); - if (!opts->omit_values) { - if (opts->show_keys) - strbuf_addch(buf, opts->key_delim); - if (opts->type == TYPE_INT) - res = format_config_int64(buf, key_, value_, kvi, gently); - else if (opts->type == TYPE_BOOL) - res = format_config_bool(buf, key_, value_, gently); - else if (opts->type == TYPE_BOOL_OR_INT) - res = format_config_bool_or_int(buf, key_, value_, kvi, gently); - else if (opts->type == TYPE_BOOL_OR_STR) - res = format_config_bool_or_str(buf, value_); - else if (opts->type == TYPE_PATH) - res = format_config_path(buf, key_, value_, gently); - else if (opts->type == TYPE_EXPIRY_DATE) - res = format_config_expiry_date(buf, key_, value_, gently); - else if (opts->type == TYPE_COLOR) - res = format_config_color(buf, key_, value_, gently); - else if (value_) { + if (opts->omit_values) + goto terminator; + + if (opts->show_keys) + strbuf_addch(buf, opts->key_delim); + + switch (opts->type) { + case TYPE_INT: + res = format_config_int64(buf, key_, value_, kvi, gently); + break; + + case TYPE_BOOL: + res = format_config_bool(buf, key_, value_, gently); + break; + + case TYPE_BOOL_OR_INT: + res = format_config_bool_or_int(buf, key_, value_, kvi, gently); + break; + + case TYPE_BOOL_OR_STR: + res = format_config_bool_or_str(buf, value_); + break; + + case TYPE_PATH: + res = format_config_path(buf, key_, value_, gently); + break; + + case TYPE_EXPIRY_DATE: + res = format_config_expiry_date(buf, key_, value_, gently); + break; + + case TYPE_COLOR: + res = format_config_color(buf, key_, value_, gently); + break; + + case TYPE_NONE: + if (value_) { strbuf_addstr(buf, value_); } else { /* Just show the key name; back out delimiter */ if (opts->show_keys) strbuf_setlen(buf, buf->len - 1); } + break; + + default: + BUG("undefined type %d", opts->type); } + +terminator: strbuf_addch(buf, opts->term); return res; } |
