| OLD | NEW |
| 1 # Copyright (c) 2013-2015 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013-2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Entry point for fully-annotated builds. | 5 """Entry point for fully-annotated builds. |
| 6 | 6 |
| 7 This script is part of the effort to move all builds to annotator-based | 7 This script is part of the effort to move all builds to annotator-based |
| 8 systems. Any builder configured to use the AnnotatorFactory.BaseFactory() | 8 systems. Any builder configured to use the AnnotatorFactory.BaseFactory() |
| 9 found in scripts/master/factory/annotator_factory.py executes a single | 9 found in scripts/master/factory/annotator_factory.py executes a single |
| 10 AddAnnotatedScript step. That step (found in annotator_commands.py) calls | 10 AddAnnotatedScript step. That step (found in annotator_commands.py) calls |
| (...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 properties.pop('root', None) | 426 properties.pop('root', None) |
| 427 | 427 |
| 428 # TODO(iannucci): A much better way to do this would be to dynamically | 428 # TODO(iannucci): A much better way to do this would be to dynamically |
| 429 # detect if the mirrors are actually available during the execution of the | 429 # detect if the mirrors are actually available during the execution of the |
| 430 # recipe. | 430 # recipe. |
| 431 if ('use_mirror' not in properties and ( | 431 if ('use_mirror' not in properties and ( |
| 432 'TESTING_MASTERNAME' in os.environ or | 432 'TESTING_MASTERNAME' in os.environ or |
| 433 'TESTING_SLAVENAME' in os.environ)): | 433 'TESTING_SLAVENAME' in os.environ)): |
| 434 properties['use_mirror'] = False | 434 properties['use_mirror'] = False |
| 435 | 435 |
| 436 engine = RecipeEngine(stream, properties, test_data) | 436 engine = RecipeEngine(stream, properties, test_data, universe) |
| 437 | 437 |
| 438 # Create all API modules and top level RunSteps function. It doesn't launch | 438 # Create all API modules and top level RunSteps function. It doesn't launch |
| 439 # any recipe code yet; RunSteps needs to be called. | 439 # any recipe code yet; RunSteps needs to be called. |
| 440 api = None | 440 api = None |
| 441 with stream.step('setup_build') as s: | 441 with stream.step('setup_build') as s: |
| 442 assert 'recipe' in properties | 442 assert 'recipe' in properties |
| 443 recipe = properties['recipe'] | 443 recipe = properties['recipe'] |
| 444 | 444 |
| 445 properties_to_print = properties.copy() | 445 properties_to_print = properties.copy() |
| 446 if 'use_mirror' in properties: | 446 if 'use_mirror' in properties: |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 743 Knows how to execute steps emitted by a recipe, holds global state such as | 743 Knows how to execute steps emitted by a recipe, holds global state such as |
| 744 step history and build properties. Each recipe module API has a reference to | 744 step history and build properties. Each recipe module API has a reference to |
| 745 this object. | 745 this object. |
| 746 | 746 |
| 747 Recipe modules that are aware of the engine: | 747 Recipe modules that are aware of the engine: |
| 748 * properties - uses engine.properties. | 748 * properties - uses engine.properties. |
| 749 * step_history - uses engine.step_history. | 749 * step_history - uses engine.step_history. |
| 750 * step - uses engine.create_step(...). | 750 * step - uses engine.create_step(...). |
| 751 | 751 |
| 752 """ | 752 """ |
| 753 def __init__(self, stream, properties, test_data): | 753 def __init__(self, stream, properties, test_data, universe): |
| 754 self._stream = stream | 754 self._stream = stream |
| 755 self._properties = properties | 755 self._properties = properties |
| 756 self._test_data = test_data | 756 self._test_data = test_data |
| 757 self._step_history = collections.OrderedDict() | 757 self._step_history = collections.OrderedDict() |
| 758 self._universe = universe |
| 758 | 759 |
| 759 self._previous_step_annotation = None | 760 self._previous_step_annotation = None |
| 760 self._previous_step_result = None | 761 self._previous_step_result = None |
| 761 self._api = None | 762 self._api = None |
| 762 | 763 |
| 763 @property | 764 @property |
| 764 def properties(self): | 765 def properties(self): |
| 765 return self._properties | 766 return self._properties |
| 766 | 767 |
| 767 @property | 768 @property |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 854 exc = recipe_api.InfraFailure | 855 exc = recipe_api.InfraFailure |
| 855 | 856 |
| 856 step_result.presentation.status = state | 857 step_result.presentation.status = state |
| 857 if step_test.enabled: | 858 if step_test.enabled: |
| 858 # To avoid cluttering the expectations, don't emit this in testmode. | 859 # To avoid cluttering the expectations, don't emit this in testmode. |
| 859 self._previous_step_annotation.emit( | 860 self._previous_step_annotation.emit( |
| 860 'step returned non-zero exit code: %d' % step_result.retcode) | 861 'step returned non-zero exit code: %d' % step_result.retcode) |
| 861 | 862 |
| 862 raise exc(step['name'], step_result) | 863 raise exc(step['name'], step_result) |
| 863 | 864 |
| 864 | |
| 865 def run(self, recipe_script, api): | 865 def run(self, recipe_script, api): |
| 866 """Run a recipe represented by a recipe_script object. | 866 """Run a recipe represented by a recipe_script object. |
| 867 | 867 |
| 868 This function blocks until recipe finishes. | 868 This function blocks until recipe finishes. |
| 869 | 869 |
| 870 Args: | 870 Args: |
| 871 recipe_script: The recipe to run, as represented by a RecipeScript object. | 871 recipe_script: The recipe to run, as represented by a RecipeScript object. |
| 872 api: The api, with loaded module dependencies. | 872 api: The api, with loaded module dependencies. |
| 873 Used by the some special modules. | 873 Used by the some special modules. |
| 874 | 874 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 934 Args: | 934 Args: |
| 935 step: ConfigGroup object with information about the step, see | 935 step: ConfigGroup object with information about the step, see |
| 936 recipe_modules/step/config.py. | 936 recipe_modules/step/config.py. |
| 937 | 937 |
| 938 Returns: | 938 Returns: |
| 939 Opaque engine specific object that is understood by 'run_steps' method. | 939 Opaque engine specific object that is understood by 'run_steps' method. |
| 940 """ | 940 """ |
| 941 return step.as_jsonish() | 941 return step.as_jsonish() |
| 942 | 942 |
| 943 | 943 |
| OLD | NEW |