Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Unified Diff: recipe_engine/step_runner.py

Issue 2245113002: Track step nesting in StreamEngine. (Closed) Base URL: https://github.com/luci/recipes-py@emit-initial-properties
Patch Set: Rebase, comments. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « recipe_engine/simulation_test.py ('k') | recipe_engine/stream.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: recipe_engine/step_runner.py
diff --git a/recipe_engine/step_runner.py b/recipe_engine/step_runner.py
index 02407f9fce5b1e2881e78904edba223a3b5420b7..7947ff3705c74c131ed1e8471b73e7648ffcebaa 100644
--- a/recipe_engine/step_runner.py
+++ b/recipe_engine/step_runner.py
@@ -97,11 +97,12 @@ class StepRunner(object):
allow_subannotations: if True, lets the step emit its own annotations
trigger_specs: a list of trigger specifications, see also _trigger_builds.
stdout: Path to a file to put step stdout into. If used, stdout won't
- appear in annotator's stdout (and |allow_subannotations| is
- ignored).
+ appear in annotator's stdout (and |allow_subannotations| is
+ ignored).
stderr: Path to a file to put step stderr into. If used, stderr won't
- appear in annotator's stderr.
+ appear in annotator's stderr.
stdin: Path to a file to read step stdin from.
+ step_nest_level: the step's nesting level.
Returns an OpenStep object.
"""
@@ -164,9 +165,12 @@ class SubprocessStepRunner(StepRunner):
def open_step(self, step_dict):
allow_subannotations = step_dict.get('allow_subannotations', False)
+ nest_level = step_dict.pop('step_nest_level', 0)
+
step_stream = self._stream_engine.new_step_stream(
step_dict['name'],
- allow_subannotations=allow_subannotations)
+ allow_subannotations=allow_subannotations,
+ nest_level=nest_level)
if not step_dict.get('cmd'):
class EmptyOpenStep(OpenStep):
def run(inner):
@@ -187,8 +191,6 @@ class SubprocessStepRunner(StepRunner):
step_dict, recipe_test_api.DisabledTestData())
cmd = map(str, step_dict['cmd'])
step_env = _merge_envs(os.environ, step_dict.get('env', {}))
- if 'nest_level' in step_dict:
- step_stream.step_nest_level(step_dict['nest_level'])
self._print_step(step_stream, step_dict, step_env)
class ReturnOpenStep(OpenStep):
@@ -399,9 +401,10 @@ class SimulationStepRunner(StepRunner):
steps that would have been run in steps_ran. Uses test_data to mock return
values.
"""
- def __init__(self, stream_engine, test_data):
+ def __init__(self, stream_engine, test_data, annotator):
self._test_data = test_data
self._stream_engine = stream_engine
+ self._annotator = annotator
self._step_history = collections.OrderedDict()
@property
@@ -414,17 +417,17 @@ class SimulationStepRunner(StepRunner):
# added to self._step_history, earlier. So copy it here so at least we
# keep the modifications local.
step_dict = dict(step_dict)
+ nest_level = step_dict.pop('step_nest_level', 0)
test_data_fn = step_dict.pop('step_test_data', recipe_test_api.StepTestData)
step_test = self._test_data.pop_step_test_data(
step_dict['name'], test_data_fn)
step_dict, placeholders = render_step(step_dict, step_test)
- outstream = StringIO.StringIO()
# Layer the simulation step on top of the given stream engine.
- step_stream = stream.ProductStreamEngine.StepStream(
- self._stream_engine.new_step_stream(step_dict['name']),
- stream.BareAnnotationStepStream(outstream))
+ step_stream = self._stream_engine.new_step_stream(
+ step_dict['name'],
+ nest_level=nest_level)
class ReturnOpenStep(OpenStep):
def run(inner):
@@ -440,12 +443,14 @@ class SimulationStepRunner(StepRunner):
# note that '~' sorts after 'z' so that this will be last on each
# step. also use _step to get access to the mutable step
# dictionary.
- lines = filter(None, outstream.getvalue()).splitlines()
+ buf = self._annotator.step_buffer(step_dict['name'])
+ lines = filter(None, buf.getvalue()).splitlines()
lines = [stream.encode_str(x) for x in lines]
if lines:
# This magically floats into step_history, which we have already
# added step_dict to.
step_dict['~followup_annotations'] = lines
+ step_stream.close()
@property
def stream(inner):
« no previous file with comments | « recipe_engine/simulation_test.py ('k') | recipe_engine/stream.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698