@@ -522,6 +522,8 @@ include::config/sequencer.txt[]
include::config/showbranch.txt[]
+include::config/sideband.txt[]
+
include::config/sparse.txt[]
include::config/splitindex.txt[]
new file mode 100644
@@ -0,0 +1,5 @@
+sideband.allowControlCharacters::
+ By default, control characters that are delivered via the sideband
+ are masked, to prevent potentially unwanted ANSI escape sequences
+ from being sent to the terminal. Use this config setting to override
+ this behavior.
@@ -25,6 +25,8 @@ static struct keyword_entry keywords[] = {
{ "error", GIT_COLOR_BOLD_RED },
};
+static int allow_control_characters;
+
/* Returns a color setting (GIT_COLOR_NEVER, etc). */
static int use_sideband_colors(void)
{
@@ -38,6 +40,9 @@ static int use_sideband_colors(void)
if (use_sideband_colors_cached >= 0)
return use_sideband_colors_cached;
+ git_config_get_bool("sideband.allowcontrolcharacters",
+ &allow_control_characters);
+
if (!git_config_get_string_tmp(key, &value))
use_sideband_colors_cached = git_config_colorbool(key, value);
else if (!git_config_get_string_tmp("color.ui", &value))
@@ -67,6 +72,11 @@ void list_config_color_sideband_slots(struct string_list *list, const char *pref
static void strbuf_add_sanitized(struct strbuf *dest, const char *src, int n)
{
+ if (allow_control_characters) {
+ strbuf_add(dest, src, n);
+ return;
+ }
+
strbuf_grow(dest, n);
for (; n && *src; src++, n--) {
if (!iscntrl(*src) || *src == '\t' || *src == '\n')
@@ -106,9 +106,15 @@ test_expect_success 'disallow (color) control sequences in sideband' '
EOF
test_config_global uploadPack.packObjectshook ./color-me-surprised &&
test_commit need-at-least-one-commit &&
+
git clone --no-local . throw-away 2>stderr &&
test_decode_color <stderr >decoded &&
- test_grep ! RED decoded
+ test_grep ! RED decoded &&
+
+ rm -rf throw-away &&
+ git -c sideband.allowControlCharacters clone --no-local . throw-away 2>stderr &&
+ test_decode_color <stderr >decoded &&
+ test_grep RED decoded
'
test_done