| # Copyright 2017 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # Shell scripting helpers (created for Telemetry dependency roll scripts). |
| |
| from __future__ import print_function |
| |
| import os as _os |
| import shutil as _shutil |
| import subprocess as _subprocess |
| import tempfile as _tempfile |
| from contextlib import contextmanager as _contextmanager |
| |
| @_contextmanager |
| def ScopedChangeDir(new_path): |
| old_path = _os.getcwd() |
| _os.chdir(new_path) |
| print('> cd', _os.getcwd()) |
| try: |
| yield |
| finally: |
| _os.chdir(old_path) |
| print('> cd', old_path) |
| |
| @_contextmanager |
| def ScopedTempDir(): |
| temp_dir = _tempfile.mkdtemp() |
| try: |
| with ScopedChangeDir(temp_dir): |
| yield |
| finally: |
| _shutil.rmtree(temp_dir) |
| |
| def CallProgram(path_parts, *args, **kwargs): |
| '''Call an executable os.path.join(*path_parts) with the arguments specified |
| by *args. Any keyword arguments are passed as environment variables.''' |
| args = [_os.path.join(*path_parts)] + list(args) |
| env = dict(_os.environ) |
| env.update(kwargs) |
| print('>', ' '.join(args)) |
| _subprocess.check_call(args, env=env) |