From 7c5e61b3f442b8ca2e75a08bf34eb65eec285b93 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 5 Nov 2011 11:53:20 -0700 Subject: Enable colors during the depend phase. --- bin/isolated-functions.sh | 27 +++++++++++++-------------- pym/portage/package/ebuild/doebuild.py | 13 +++++++++++++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh index 733795aa1..d2ea319bd 100644 --- a/bin/isolated-functions.sh +++ b/bin/isolated-functions.sh @@ -411,7 +411,11 @@ unset_colors() { set_colors() { COLS=${COLUMNS:-0} # bash's internal COLUMNS variable - (( COLS == 0 )) && COLS=$(set -- $(stty size 2>/dev/null) ; echo $2) + # Avoid wasteful stty calls during the "depend" phases. + # If stdout is a pipe, the parent process can export COLUMNS + # if it's relevant. + [[ $COLS == 0 && $EBUILD_PHASE != depend ]] && \ + COLS=$(set -- $(stty size 2>/dev/null) ; echo $2) (( COLS > 0 )) || (( COLS = 80 )) # Now, ${ENDCOL} will move us to the end of the @@ -434,19 +438,14 @@ RC_INDENTATION='' RC_DEFAULT_INDENT=2 RC_DOT_PATTERN='' -if [[ $EBUILD_PHASE == depend ]] ; then - # avoid unneeded stty call in set_colors during "depend" phase - unset_colors -else - case "${NOCOLOR:-false}" in - yes|true) - unset_colors - ;; - no|false) - set_colors - ;; - esac -fi +case "${NOCOLOR:-false}" in + yes|true) + unset_colors + ;; + no|false) + set_colors + ;; +esac if [[ -z ${USERLAND} ]] ; then case $(uname -s) in diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index ccea574c5..cb7da78c7 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -283,6 +283,19 @@ def doebuild_environment(myebuild, mydo, myroot=None, settings=None, (c, style_to_ansi_code(c))) mysettings["PORTAGE_COLORMAP"] = "\n".join(mycolors) + if "COLUMNS" not in mysettings: + # Set COLUMNS, in order to prevent unnecessary stty calls + # inside the set_colors function of isolated-functions.sh. + # We cache the result in os.environ, in order to avoid + # multiple stty calls in cases when get_term_size() falls + # back to stty due to a missing or broken curses module. + columns = os.environ.get("COLUMNS") + if columns is None: + rows, columns = portage.output.get_term_size() + columns = str(columns) + os.environ["COLUMNS"] = columns + mysettings["COLUMNS"] = columns + # All EAPI dependent code comes last, so that essential variables # like PORTAGE_BUILDDIR are still initialized even in cases when # UnsupportedAPIException needs to be raised, which can be useful -- cgit v1.2.3-1-g7c22