From 9a0c2bd5316853855b6f2f2940b15d13289a2030 Mon Sep 17 00:00:00 2001 From: Eric Fried Date: Thu, 28 Apr 2016 15:45:25 -0500 Subject: [PATCH] Default LOG_COLOR based on interactive execution Change I4a10a49db97d413349bcfceeb8c4164936fbcc40 added colorful PS4 via tput. However, if TERM is not set (as is the case when stacking noninteractively), tput errors with the following: tput: No value for $TERM and no -T specified ...twice for every log message, thus flooding the logs. This change set turns LOG_COLOR off by default for noninteractive execution. If LOG_COLOR is set to True when noninteractive (TERM is unset), obviate the above errors by passing tput a simple -T. Change-Id: I0f8ad82375cde463160bad5bd9918f1e4b19326d Closes-Bug: 1576405 --- stackrc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/stackrc b/stackrc index 7a5b821d4e..acb7d3f650 100644 --- a/stackrc +++ b/stackrc @@ -135,12 +135,29 @@ elif [[ -f $RC_DIR/.localrc.auto ]]; then source $RC_DIR/.localrc.auto fi +# Default for log coloring is based on interactive-or-not. +# Baseline assumption is that non-interactive invocations are for CI, +# where logs are to be presented as browsable text files; hence color +# codes should be omitted. +# Simply override LOG_COLOR if your environment is different. +if [ -t 1 ]; then + _LOG_COLOR_DEFAULT=True +else + _LOG_COLOR_DEFAULT=False +fi + # Use color for logging output (only available if syslog is not used) -LOG_COLOR=$(trueorfalse True LOG_COLOR) +LOG_COLOR=$(trueorfalse $_LOG_COLOR_DEFAULT LOG_COLOR) # Make tracing more educational if [[ "$LOG_COLOR" == "True" ]]; then - export PS4='+\[$(tput setaf 242)\]$(short_source)\[$(tput sgr0)\] ' + # tput requires TERM or -T. If neither is present, use vt100, a + # no-frills least common denominator supported everywhere. + TPUT_T= + if ! [ $TERM ]; then + TPUT_T='-T vt100' + fi + export PS4='+\[$(tput '$TPUT_T' setaf 242)\]$(short_source)\[$(tput '$TPUT_T' sgr0)\] ' else export PS4='+ $(short_source): ' fi