From: Derrick Stolee Date: Mon, 23 Feb 2026 12:26:51 +0000 (+0000) Subject: config: format expiry dates quietly X-Git-Tag: v2.54.0-rc0~114^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9cb4a5e1ba3e586e77b1c026d509f284b4c55764;p=thirdparty%2Fgit.git config: format expiry dates quietly Move the logic for formatting expiry date config values into a helper method and use quiet parsing when needed. Note that git_config_expiry_date() will show an error on a bad parse and not die() like most other git_config...() parsers. Thus, we use 'quietly' here instead of 'gently'. There is an unfortunate asymmetry in these two parsing methods, but we need to treat a positive response from parse_expiry_date() as an error or we will get incorrect values. This updates the behavior of 'git config list --type=expiry-date' to be quiet when attempting parsing on non-date values. Signed-off-by: Derrick Stolee Signed-off-by: Junio C Hamano --- diff --git a/builtin/config.c b/builtin/config.c index 2828b6dcf1..ee77ddc87c 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -3,6 +3,7 @@ #include "abspath.h" #include "config.h" #include "color.h" +#include "date.h" #include "editor.h" #include "environment.h" #include "gettext.h" @@ -333,6 +334,23 @@ static int format_config_path(struct strbuf *buf, return 0; } +static int format_config_expiry_date(struct strbuf *buf, + const char *key_, + const char *value_, + int quietly) +{ + timestamp_t t; + if (quietly) { + if (parse_expiry_date(value_, &t)) + return -1; + } else if (git_config_expiry_date(&t, key_, value_) < 0) { + return -1; + } + + strbuf_addf(buf, "%"PRItime, t); + return 0; +} + /* * Format the configuration key-value pair (`key_`, `value_`) and * append it into strbuf `buf`. Returns a negative value on failure, @@ -368,12 +386,9 @@ static int format_config(const struct config_display_options *opts, 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) { - timestamp_t t; - if (git_config_expiry_date(&t, key_, value_) < 0) - return -1; - strbuf_addf(buf, "%"PRItime, t); - } else if (opts->type == TYPE_COLOR) { + else if (opts->type == TYPE_EXPIRY_DATE) + res = format_config_expiry_date(buf, key_, value_, gently); + else if (opts->type == TYPE_COLOR) { char v[COLOR_MAXLEN]; if (git_config_color(v, key_, value_) < 0) return -1; diff --git a/t/t1300-config.sh b/t/t1300-config.sh index 48d9c554d8..72bdd6ab03 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -2562,15 +2562,6 @@ test_expect_success 'list --type=path shows only canonicalizable path values' ' ' test_expect_success 'list --type=expiry-date shows only canonicalizable dates' ' - cat >expecterr <<-EOF && - error: '\''True'\'' for '\''section.foo'\'' is not a valid timestamp - error: '\''~/dir'\'' for '\''section.path'\'' is not a valid timestamp - error: '\''red'\'' for '\''section.red'\'' is not a valid timestamp - error: '\''Blue'\'' for '\''section.blue'\'' is not a valid timestamp - error: '\'':(optional)no-such-path'\'' for '\''section.missing'\'' is not a valid timestamp - error: '\'':(optional)expect'\'' for '\''section.exists'\'' is not a valid timestamp - EOF - git config ${mode_prefix}list --type=expiry-date >actual 2>err && # section.number and section.big parse as relative dates that could @@ -2578,7 +2569,7 @@ test_expect_success 'list --type=expiry-date shows only canonicalizable dates' ' test_grep section.big actual && test_grep section.number actual && test_grep "section.date=$(git config --type=expiry-date section.$key)" actual && - test_cmp expecterr err + test_must_be_empty err ' test_expect_success 'list --type=color shows only canonicalizable color values' '