aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerrick Stolee <stolee@gmail.com>2026-02-23 12:26:54 +0000
committerJunio C Hamano <gitster@pobox.com>2026-02-23 13:23:41 -0800
commit645f92a3e9179ebf1ed42dc4fa05cc8dd71e3e9c (patch)
treeaa0dbd2a064f60ae3c6300ee454feac35dd5fa06
parent2d4ab5a885f365cb66156ff4553f88c000dfa307 (diff)
downloadgit-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.c62
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;
}