sideband: highlight keywords in remote sideband output
The colorization is controlled with the config setting "color.remote".
Supported keywords are "error", "warning", "hint" and "success". They
are highlighted if they appear at the start of the line, which is
common in error messages, eg.
ERROR: commit is missing Change-Id
The Git push process itself prints lots of non-actionable messages
(eg. bandwidth statistics, object counters for different phases of the
process). This obscures actionable error messages that servers may
send back. Highlighting keywords in the sideband draws more attention
to those messages.
The background for this change is that Gerrit does server-side
processing to create or update code reviews, and actionable error
messages (eg. missing Change-Id) must be communicated back to the user
during the push. User research has shown that new users have trouble
seeing these messages.
The highlighting is done on the client rather than server side, so
servers don't have to grow capabilities to understand terminal escape
codes and terminal state. It also consistent with the current state
where Git is control of the local display (eg. prefixing messages with
"remote: ").
The highlighting can be configured using color.remote.<KEYWORD>
configuration settings. Since the keys are matched case insensitively,
we match the keywords case insensitively too.
Finally, this solution is backwards compatible: many servers already
prefix their messages with "error", and they will benefit from this
change without requiring a server update. By contrast, a server-side
solution would likely require plumbing the TERM variable through the
git protocol, so it would require changes to both server and client.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-08-07 14:51:08 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='remote messages are colorized on the client'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
test_expect_success 'setup' '
|
|
|
|
mkdir .git/hooks &&
|
|
|
|
write_script .git/hooks/update <<-\EOF &&
|
|
|
|
echo error: error
|
|
|
|
echo ERROR: also highlighted
|
|
|
|
echo hint: hint
|
|
|
|
echo hinting: not highlighted
|
|
|
|
echo success: success
|
|
|
|
echo warning: warning
|
|
|
|
echo prefixerror: error
|
|
|
|
echo " " "error: leading space"
|
2018-08-18 18:16:28 +02:00
|
|
|
echo " "
|
|
|
|
echo Err
|
sideband: highlight keywords in remote sideband output
The colorization is controlled with the config setting "color.remote".
Supported keywords are "error", "warning", "hint" and "success". They
are highlighted if they appear at the start of the line, which is
common in error messages, eg.
ERROR: commit is missing Change-Id
The Git push process itself prints lots of non-actionable messages
(eg. bandwidth statistics, object counters for different phases of the
process). This obscures actionable error messages that servers may
send back. Highlighting keywords in the sideband draws more attention
to those messages.
The background for this change is that Gerrit does server-side
processing to create or update code reviews, and actionable error
messages (eg. missing Change-Id) must be communicated back to the user
during the push. User research has shown that new users have trouble
seeing these messages.
The highlighting is done on the client rather than server side, so
servers don't have to grow capabilities to understand terminal escape
codes and terminal state. It also consistent with the current state
where Git is control of the local display (eg. prefixing messages with
"remote: ").
The highlighting can be configured using color.remote.<KEYWORD>
configuration settings. Since the keys are matched case insensitively,
we match the keywords case insensitively too.
Finally, this solution is backwards compatible: many servers already
prefix their messages with "error", and they will benefit from this
change without requiring a server update. By contrast, a server-side
solution would likely require plumbing the TERM variable through the
git protocol, so it would require changes to both server and client.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-08-07 14:51:08 +02:00
|
|
|
exit 0
|
|
|
|
EOF
|
|
|
|
echo 1 >file &&
|
|
|
|
git add file &&
|
|
|
|
git commit -m 1 &&
|
|
|
|
git clone . child &&
|
|
|
|
(
|
|
|
|
cd child &&
|
|
|
|
test_commit message2 file content2
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'keywords' '
|
|
|
|
git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/keywords 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "<BOLD;RED>error<RESET>: error" decoded &&
|
|
|
|
grep "<YELLOW>hint<RESET>:" decoded &&
|
|
|
|
grep "<BOLD;GREEN>success<RESET>:" decoded &&
|
|
|
|
grep "<BOLD;YELLOW>warning<RESET>:" decoded
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'whole words at line start' '
|
|
|
|
git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/whole-words 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "<YELLOW>hint<RESET>:" decoded &&
|
|
|
|
grep "hinting: not highlighted" decoded &&
|
|
|
|
grep "prefixerror: error" decoded
|
|
|
|
'
|
|
|
|
|
2018-08-18 18:16:28 +02:00
|
|
|
test_expect_success 'short line' '
|
|
|
|
git -C child -c color.remote=always push -f origin HEAD:short-line 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "remote: Err" decoded
|
|
|
|
'
|
|
|
|
|
sideband: highlight keywords in remote sideband output
The colorization is controlled with the config setting "color.remote".
Supported keywords are "error", "warning", "hint" and "success". They
are highlighted if they appear at the start of the line, which is
common in error messages, eg.
ERROR: commit is missing Change-Id
The Git push process itself prints lots of non-actionable messages
(eg. bandwidth statistics, object counters for different phases of the
process). This obscures actionable error messages that servers may
send back. Highlighting keywords in the sideband draws more attention
to those messages.
The background for this change is that Gerrit does server-side
processing to create or update code reviews, and actionable error
messages (eg. missing Change-Id) must be communicated back to the user
during the push. User research has shown that new users have trouble
seeing these messages.
The highlighting is done on the client rather than server side, so
servers don't have to grow capabilities to understand terminal escape
codes and terminal state. It also consistent with the current state
where Git is control of the local display (eg. prefixing messages with
"remote: ").
The highlighting can be configured using color.remote.<KEYWORD>
configuration settings. Since the keys are matched case insensitively,
we match the keywords case insensitively too.
Finally, this solution is backwards compatible: many servers already
prefix their messages with "error", and they will benefit from this
change without requiring a server update. By contrast, a server-side
solution would likely require plumbing the TERM variable through the
git protocol, so it would require changes to both server and client.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-08-07 14:51:08 +02:00
|
|
|
test_expect_success 'case-insensitive' '
|
|
|
|
git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/case-insensitive 2>output &&
|
|
|
|
cat output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "<BOLD;RED>error<RESET>: error" decoded &&
|
|
|
|
grep "<BOLD;RED>ERROR<RESET>: also highlighted" decoded
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'leading space' '
|
|
|
|
git --git-dir child/.git -c color.remote=always push -f origin HEAD:refs/heads/leading-space 2>output && cat output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep " <BOLD;RED>error<RESET>: leading space" decoded
|
|
|
|
'
|
|
|
|
|
2018-08-18 18:16:28 +02:00
|
|
|
test_expect_success 'spaces only' '
|
|
|
|
git -C child -c color.remote=always push -f origin HEAD:only-space 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "remote: " decoded
|
|
|
|
'
|
|
|
|
|
sideband: highlight keywords in remote sideband output
The colorization is controlled with the config setting "color.remote".
Supported keywords are "error", "warning", "hint" and "success". They
are highlighted if they appear at the start of the line, which is
common in error messages, eg.
ERROR: commit is missing Change-Id
The Git push process itself prints lots of non-actionable messages
(eg. bandwidth statistics, object counters for different phases of the
process). This obscures actionable error messages that servers may
send back. Highlighting keywords in the sideband draws more attention
to those messages.
The background for this change is that Gerrit does server-side
processing to create or update code reviews, and actionable error
messages (eg. missing Change-Id) must be communicated back to the user
during the push. User research has shown that new users have trouble
seeing these messages.
The highlighting is done on the client rather than server side, so
servers don't have to grow capabilities to understand terminal escape
codes and terminal state. It also consistent with the current state
where Git is control of the local display (eg. prefixing messages with
"remote: ").
The highlighting can be configured using color.remote.<KEYWORD>
configuration settings. Since the keys are matched case insensitively,
we match the keywords case insensitively too.
Finally, this solution is backwards compatible: many servers already
prefix their messages with "error", and they will benefit from this
change without requiring a server update. By contrast, a server-side
solution would likely require plumbing the TERM variable through the
git protocol, so it would require changes to both server and client.
Helped-by: Duy Nguyen <pclouds@gmail.com>
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-08-07 14:51:08 +02:00
|
|
|
test_expect_success 'no coloring for redirected output' '
|
|
|
|
git --git-dir child/.git push -f origin HEAD:refs/heads/redirected-output 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "error: error" decoded
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push with customized color' '
|
|
|
|
git --git-dir child/.git -c color.remote=always -c color.remote.error=blue push -f origin HEAD:refs/heads/customized-color 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "<BLUE>error<RESET>:" decoded &&
|
|
|
|
grep "<BOLD;GREEN>success<RESET>:" decoded
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'error in customized color' '
|
|
|
|
git --git-dir child/.git -c color.remote=always -c color.remote.error=i-am-not-a-color push -f origin HEAD:refs/heads/error-customized-color 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "<BOLD;GREEN>success<RESET>:" decoded
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'fallback to color.ui' '
|
|
|
|
git --git-dir child/.git -c color.ui=always push -f origin HEAD:refs/heads/fallback-color-ui 2>output &&
|
|
|
|
test_decode_color <output >decoded &&
|
|
|
|
grep "<BOLD;RED>error<RESET>: error" decoded
|
|
|
|
'
|
|
|
|
|
|
|
|
test_done
|