diff --git a/infra/config/recipes.cfg b/infra/config/recipes.cfg index dba8a293a..9585686d1 100644 --- a/infra/config/recipes.cfg +++ b/infra/config/recipes.cfg @@ -16,7 +16,7 @@ "deps": { "recipe_engine": { "branch": "master", - "revision": "02cdffb4e155ba27e2c90142998faaeb1d788b0a", + "revision": "f6fc910b1f87c6d0d8757b9d40557a1caf75d506", "url": "https://chromium.googlesource.com/infra/luci/recipes-py.git" } }, diff --git a/recipes/README.recipes.md b/recipes/README.recipes.md index e46b5a049..f869462f9 100644 --- a/recipes/README.recipes.md +++ b/recipes/README.recipes.md @@ -1061,23 +1061,23 @@ Move things around in a loop! — **def [RunSteps](/recipes/recipe_modules/windows_sdk/examples/full.py#13)(api):** -[recipe_engine/recipe_modules/assertions]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-assertions -[recipe_engine/recipe_modules/buildbucket]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-buildbucket -[recipe_engine/recipe_modules/cipd]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-cipd -[recipe_engine/recipe_modules/commit_position]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-commit_position -[recipe_engine/recipe_modules/context]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-context -[recipe_engine/recipe_modules/cq]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-cq -[recipe_engine/recipe_modules/file]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-file -[recipe_engine/recipe_modules/json]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-json -[recipe_engine/recipe_modules/milo]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-milo -[recipe_engine/recipe_modules/path]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-path -[recipe_engine/recipe_modules/platform]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-platform -[recipe_engine/recipe_modules/properties]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-properties -[recipe_engine/recipe_modules/python]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-python -[recipe_engine/recipe_modules/raw_io]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-raw_io -[recipe_engine/recipe_modules/resultdb]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-resultdb -[recipe_engine/recipe_modules/runtime]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-runtime -[recipe_engine/recipe_modules/step]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-step -[recipe_engine/recipe_modules/url]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-url -[recipe_engine/recipe_modules/version]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/README.recipes.md#recipe_modules-version -[recipe_engine/wkt/RecipeApi]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/02cdffb4e155ba27e2c90142998faaeb1d788b0a/recipe_engine/recipe_api.py#878 +[recipe_engine/recipe_modules/assertions]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-assertions +[recipe_engine/recipe_modules/buildbucket]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-buildbucket +[recipe_engine/recipe_modules/cipd]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-cipd +[recipe_engine/recipe_modules/commit_position]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-commit_position +[recipe_engine/recipe_modules/context]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-context +[recipe_engine/recipe_modules/cq]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-cq +[recipe_engine/recipe_modules/file]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-file +[recipe_engine/recipe_modules/json]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-json +[recipe_engine/recipe_modules/milo]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-milo +[recipe_engine/recipe_modules/path]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-path +[recipe_engine/recipe_modules/platform]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-platform +[recipe_engine/recipe_modules/properties]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-properties +[recipe_engine/recipe_modules/python]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-python +[recipe_engine/recipe_modules/raw_io]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-raw_io +[recipe_engine/recipe_modules/resultdb]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-resultdb +[recipe_engine/recipe_modules/runtime]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-runtime +[recipe_engine/recipe_modules/step]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-step +[recipe_engine/recipe_modules/url]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-url +[recipe_engine/recipe_modules/version]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/README.recipes.md#recipe_modules-version +[recipe_engine/wkt/RecipeApi]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/f6fc910b1f87c6d0d8757b9d40557a1caf75d506/recipe_engine/recipe_api.py#878 diff --git a/recipes/recipes.py b/recipes/recipes.py index c87581f0f..4e37b9cf8 100755 --- a/recipes/recipes.py +++ b/recipes/recipes.py @@ -104,7 +104,9 @@ def parse(repo_root, recipes_cfg_path): raise MalformedRecipesCfg(ex.message, recipes_cfg_path) -_BAT = '.bat' if sys.platform.startswith(('win', 'cygwin')) else '' +IS_WIN = sys.platform.startswith(('win', 'cygwin')) + +_BAT = '.bat' if IS_WIN else '' GIT = 'git' + _BAT VPYTHON = 'vpython' + _BAT CIPD = 'cipd' + _BAT @@ -129,6 +131,7 @@ def _subprocess_call(argv, **kwargs): return subprocess.call(argv, **kwargs) + def _git_check_call(argv, **kwargs): argv = [GIT] + argv logging.info('Running %r', argv) @@ -237,12 +240,19 @@ def main(): engine_path = checkout_engine(engine_override, repo_root, recipes_cfg_path) - try: - return _subprocess_call( - [VPYTHON, '-u', - os.path.join(engine_path, 'recipe_engine', 'main.py')] + args) - except KeyboardInterrupt: - return 1 + argv = ( + [VPYTHON, '-u', os.path.join(engine_path, 'recipe_engine', 'main.py')] + + args) + + if IS_WIN: + # No real 'exec' on windows; set these signals to ignore so that they + # propagate to our children but we still wait for the child process to quit. + signal.signal(signal.SIGBREAK, signal.SIG_IGN) + signal.signal(signal.SIGINT, signal.SIG_IGN) + signal.signal(signal.SIGTERM, signal.SIG_IGN) + return _subprocess_call(argv) + else: + os.execvp(argv[0], argv) if __name__ == '__main__':