# HG changeset patch # User Gregory Szorc # Date 1524087005 25200 # Wed Apr 18 14:30:05 2018 -0700 # Node ID 43c22d224c0ba4cb4f890a37a5e04d6bb2b80c25 # Parent bcf1e6a2dfdcc23220a56b6d803ad497db488cdd Bug 1455120 - Prefix output from automation tiers; r=mshal We add a minimal Python script to run a process and prefix all its output with a string. We change the automation tiers to evaluate all make targets using this script. MozReview-Commit-ID: 79g5KUd5ked diff --git a/build/moz-automation.mk b/build/moz-automation.mk --- a/build/moz-automation.mk +++ b/build/moz-automation.mk @@ -71,17 +71,17 @@ automation/build: $(addprefix automation AUTOMATION_EXTRA_CMDLINE-l10n-check = -j1 # The commands only run if the corresponding MOZ_AUTOMATION_* variable is # enabled. This means, for example, if we enable MOZ_AUTOMATION_UPLOAD, then # 'buildsymbols' will only run if MOZ_AUTOMATION_BUILD_SYMBOLS is also set. # However, the target automation/buildsymbols will still be executed in this # case because it is a prerequisite of automation/upload. define automation_commands -@+$(MAKE) $1 $(AUTOMATION_EXTRA_CMDLINE-$1) +@+$(PYTHON) $(topsrcdir)/config/run-and-prefix.py $1 $(MAKE) $1 $(AUTOMATION_EXTRA_CMDLINE-$1) $(call BUILDSTATUS,TIER_FINISH $1) endef # The tier start message is in a separate target so make doesn't buffer it # until the step completes with output syncing enabled. automation-start/%: $(if $(filter $*,$(MOZ_AUTOMATION_TIERS)),$(call BUILDSTATUS,TIER_START $*)) diff --git a/config/run-and-prefix.py b/config/run-and-prefix.py new file mode 100644 --- /dev/null +++ b/config/run-and-prefix.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# This script runs a process and prefixes its output with. +# Usage: run-and-prefix.py prefix command arg0 argv1... + +from __future__ import absolute_import, print_function + +import os +import subprocess +import sys + +sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) +sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0) + +prefix = sys.argv[1] +args = sys.argv[2:] + +p = subprocess.Popen(args, bufsize=0, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=sys.stdin.fileno(), + universal_newlines=True) + +while True: + data = p.stdout.readline() + + if data == b'': + break + + print('%s> %s' % (prefix, data), end=b'') + +sys.exit(p.wait())