Ensure that einfo, elog, ewarn... commands direct all output to stderr
consistently. This ensures that various logging messages won't pollute
stdout, and therefore be accidentally caught in $().

This satisfies the 'output commands do not pollute' stdout requirement
that is tentatively included in EAPI 7.

Bug: https://bugs.gentoo.org/483240
---
 bin/isolated-functions.sh | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index 1ca959bb3..0acb81607 100644
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 source "${PORTAGE_BIN_PATH}/eapi.sh" || exit 1
@@ -247,7 +247,7 @@ __quiet_mode() {
 }
 
 __vecho() {
-       __quiet_mode || echo "$@"
+       __quiet_mode || echo "$@" >&2
 }
 
 # Internal logging function, don't use this in ebuilds
@@ -273,9 +273,9 @@ __elog_base() {
 
 eqawarn() {
        __elog_base QA "$*"
-       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
+       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo >&2
        echo -e "$@" | while read -r ; do
-               __vecho " $WARN*$NORMAL $REPLY" >&2
+               __vecho " $WARN*$NORMAL $REPLY"
        done
        LAST_E_CMD="eqawarn"
        return 0
@@ -283,9 +283,9 @@ eqawarn() {
 
 elog() {
        __elog_base LOG "$*"
-       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
+       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo >&2
        echo -e "$@" | while read -r ; do
-               echo " $GOOD*$NORMAL $REPLY"
+               echo " $GOOD*$NORMAL $REPLY" >&2
        done
        LAST_E_CMD="elog"
        return 0
@@ -293,9 +293,9 @@ elog() {
 
 einfo() {
        __elog_base INFO "$*"
-       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
+       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo >&2
        echo -e "$@" | while read -r ; do
-               echo " $GOOD*$NORMAL $REPLY"
+               echo " $GOOD*$NORMAL $REPLY" >&2
        done
        LAST_E_CMD="einfo"
        return 0
@@ -303,15 +303,15 @@ einfo() {
 
 einfon() {
        __elog_base INFO "$*"
-       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
-       echo -ne " ${GOOD}*${NORMAL} $*"
+       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo >&2
+       echo -ne " ${GOOD}*${NORMAL} $*" >&2
        LAST_E_CMD="einfon"
        return 0
 }
 
 ewarn() {
        __elog_base WARN "$*"
-       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
+       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo >&2
        echo -e "$@" | while read -r ; do
                echo " $WARN*$NORMAL $RC_INDENTATION$REPLY" >&2
        done
@@ -321,7 +321,7 @@ ewarn() {
 
 eerror() {
        __elog_base ERROR "$*"
-       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo
+       [[ ${RC_ENDCOL} != "yes" && ${LAST_E_CMD} == "ebegin" ]] && echo >&2
        echo -e "$@" | while read -r ; do
                echo " $BAD*$NORMAL $RC_INDENTATION$REPLY" >&2
        done
@@ -339,7 +339,7 @@ ebegin() {
                msg="${msg} ..."
        fi
        einfon "${msg}"
-       [[ ${RC_ENDCOL} == "yes" ]] && echo
+       [[ ${RC_ENDCOL} == "yes" ]] && echo >&2
        LAST_E_LEN=$(( 3 + ${#RC_INDENTATION} + ${#msg} ))
        LAST_E_CMD="ebegin"
        return 0
@@ -359,10 +359,10 @@ __eend() {
        fi
 
        if [[ ${RC_ENDCOL} == "yes" ]] ; then
-               echo -e "${ENDCOL} ${msg}"
+               echo -e "${ENDCOL} ${msg}" >&2
        else
                [[ ${LAST_E_CMD} == ebegin ]] || LAST_E_LEN=0
-               printf "%$(( COLS - LAST_E_LEN - 7 ))s%b\n" '' "${msg}"
+               printf "%$(( COLS - LAST_E_LEN - 7 ))s%b\n" '' "${msg}" >&2
        fi
 
        return ${retval}
-- 
2.16.2


Reply via email to