[PATCH 1/1] test: pre-set terminal capabilities (colors, boldness)

Subject: [PATCH 1/1] test: pre-set terminal capabilities (colors, boldness)

Date: Sat, 24 Aug 2013 16:31:13 +0300

To: notmuch@notmuchmail.org

Cc: tomi.ollila@iki.fi

From: Tomi Ollila


By pre-setting terminal capabilities (colors, boldness) to shell
variables we avoid the overhead of running external commands (in
separate subshell) each time colored text is printed to screen.
---
 test/test-lib.sh | 84 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 42 insertions(+), 42 deletions(-)

diff --git a/test/test-lib.sh b/test/test-lib.sh
index ffab1bb..8be2065 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -38,9 +38,6 @@ done,*)
 	;;
 esac
 
-# Keep the original TERM for say_color and test_emacs
-ORIGINAL_TERM=$TERM
-
 # dtach(1) provides more capable terminal environment to anything
 # that requires more than dumb terminal...
 [ x"${TERM:-dumb}" = xdumb ] && DTACH_TERM=vt100 || DTACH_TERM=$TERM
@@ -50,8 +47,49 @@ LANG=C
 LC_ALL=C
 PAGER=cat
 TZ=UTC
+export LANG LC_ALL PAGER TZ
+
+if [ x"${TERM:-dumb}" != xdumb ]; then
+	[ -t 1 ] &&
+	# http://en.wikipedia.org/wiki/Tput
+	TC_BOLD=`tput bold 2>/dev/null` &&
+	TC_RED=`tput setaf 1 2>/dev/null` &&
+	TC_GREEN=`tput setaf 2 2>/dev/null` &&
+	TC_YELLOW=`tput setaf 3 2>/dev/null` &&
+	TC_RESET=`tput sgr0 2>/dev/null` ||
+	TC_BOLD=
+else
+	TC_BOLD=
+fi
+
+if test -n "$TC_BOLD"; then
+	say_color () {
+		case "$1" in
+			error) printf '%s%s' "$TC_BOLD" "$TC_RED" ;;
+			skip)  printf '%s%s' "$TC_BOLD" "$TC_GREEN" ;;
+			pass)  printf '%s' "$TC_GREEN" ;;
+			info)  printf '%s' "$TC_YELLOW" ;;
+			*) test -n "$quiet" && return;;
+		esac
+		shift
+		printf " "
+		printf "$@"
+		printf '%s' "$TC_RESET"
+		print_subtest
+	}
+else
+	say_color() {
+		test -z "$1" && test -n "$quiet" && return
+		shift
+		printf " "
+		printf "$@"
+		print_subtest
+	}
+fi
+
 TERM=dumb
-export LANG LC_ALL PAGER TERM TZ
+export TERM
+
 GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
 if [[ ( -n "$TEST_EMACS" && -z "$TEST_EMACSCLIENT" ) || \
       ( -z "$TEST_EMACS" && -n "$TEST_EMACSCLIENT" ) ]]; then
@@ -82,15 +120,6 @@ _x32="$_x04$_x04$_x04$_x04$_x04$_x04$_x04$_x04"
 # This test checks if command xyzzy does the right thing...
 # '
 # . ./test-lib.sh
-[ "x$ORIGINAL_TERM" != "xdumb" ] && (
-		TERM=$ORIGINAL_TERM &&
-		export TERM &&
-		[ -t 1 ] &&
-		tput bold >/dev/null 2>&1 &&
-		tput setaf 1 >/dev/null 2>&1 &&
-		tput sgr0 >/dev/null 2>&1
-	) &&
-	color=t
 
 while test "$#" -ne 0
 do
@@ -136,35 +165,6 @@ else
     }
 fi
 
-if test -n "$color"; then
-	say_color () {
-		(
-		TERM=$ORIGINAL_TERM
-		export TERM
-		case "$1" in
-			error) tput bold; tput setaf 1;; # bold red
-			skip)  tput bold; tput setaf 2;; # bold green
-			pass)  tput setaf 2;;            # green
-			info)  tput setaf 3;;            # brown
-			*) test -n "$quiet" && return;;
-		esac
-		shift
-		printf " "
-		printf "$@"
-		tput sgr0
-		print_subtest
-		)
-	}
-else
-	say_color() {
-		test -z "$1" && test -n "$quiet" && return
-		shift
-		printf " "
-		printf "$@"
-		print_subtest
-	}
-fi
-
 error () {
 	say_color error "error: $*\n"
 	GIT_EXIT_OK=t
-- 
1.8.0


Thread: