aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerrick Stolee <stolee@gmail.com>2026-02-23 12:26:52 +0000
committerJunio C Hamano <gitster@pobox.com>2026-02-23 13:23:41 -0800
commitdb45e4908d6711ddc3094cb079c85278691c8267 (patch)
tree1d9f809d42a599a62bf21320db042a32eb518893
parent9cb4a5e1ba3e586e77b1c026d509f284b4c55764 (diff)
downloadgit-db45e4908d6711ddc3094cb079c85278691c8267.tar.xz
color: add color_parse_quietly()
When parsing colors, a failed parse leads to an error message due to the result returning error(). To allow for quiet parsing, create color_parse_quietly(). This is in contrast to an ..._gently() version because the original does not die(), so both options are technically 'gentle'. To accomplish this, convert the implementation of color_parse_mem() into a static color_parse_mem_1() helper that adds a 'quiet' parameter. The color_parse_quietly() method can then use this. Since it is a near equivalent to color_parse(), move that method down in the file so they can be nearby while also appearing after color_parse_mem_1(). Signed-off-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--color.c25
-rw-r--r--color.h1
2 files changed, 19 insertions, 7 deletions
diff --git a/color.c b/color.c
index 07ac8c9d40..00b53f97ac 100644
--- a/color.c
+++ b/color.c
@@ -223,11 +223,6 @@ static int parse_attr(const char *name, size_t len)
return -1;
}
-int color_parse(const char *value, char *dst)
-{
- return color_parse_mem(value, strlen(value), dst);
-}
-
/*
* Write the ANSI color codes for "c" to "out"; the string should
* already have the ANSI escape code in it. "out" should have enough
@@ -264,7 +259,8 @@ static int color_empty(const struct color *c)
return c->type <= COLOR_NORMAL;
}
-int color_parse_mem(const char *value, int value_len, char *dst)
+static int color_parse_mem_1(const char *value, int value_len,
+ char *dst, int quiet)
{
const char *ptr = value;
int len = value_len;
@@ -365,10 +361,25 @@ int color_parse_mem(const char *value, int value_len, char *dst)
OUT(0);
return 0;
bad:
- return error(_("invalid color value: %.*s"), value_len, value);
+ return quiet ? -1 : error(_("invalid color value: %.*s"), value_len, value);
#undef OUT
}
+int color_parse_mem(const char *value, int value_len, char *dst)
+{
+ return color_parse_mem_1(value, value_len, dst, 0);
+}
+
+int color_parse(const char *value, char *dst)
+{
+ return color_parse_mem(value, strlen(value), dst);
+}
+
+int color_parse_quietly(const char *value, char *dst)
+{
+ return color_parse_mem_1(value, strlen(value), dst, 1);
+}
+
enum git_colorbool git_config_colorbool(const char *var, const char *value)
{
if (value) {
diff --git a/color.h b/color.h
index 43e6c9ad09..0d72540300 100644
--- a/color.h
+++ b/color.h
@@ -118,6 +118,7 @@ bool want_color_fd(int fd, enum git_colorbool var);
* terminal.
*/
int color_parse(const char *value, char *dst);
+int color_parse_quietly(const char *value, char *dst);
int color_parse_mem(const char *value, int len, char *dst);
/*