| #!/usr/bin/env python2 |
| # Copyright 2016 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Wrapper around chromite executable scripts that use virtualenv.""" |
| |
| from __future__ import print_function |
| |
| import os |
| import sys |
| import wrapper |
| |
| # TODO(akeshet): This transitively imports a bunch of other dependencies, |
| # including cbuildbot.contants. Ideally we wouldn't need that much junk in this |
| # wrapper, and importing all that prior to entering the virtualenv might |
| # actually cause issues. |
| from chromite.lib import cros_build_lib |
| |
| # TODO(akeshet): Since we are using the above lib which imports |
| # cbuildbot.constants anyway, we might as well make use of it in determining |
| # CHROMITE_PATH. If we want to eliminate this import, we can duplicate the |
| # chromite path finding code. It would look something like this: |
| # path = os.path.dirname(os.path.realpath(__file__)) |
| # while not os.path.exists(os.path.join(path, 'PRESUBMIT.cfg')): |
| # path = os.path.dirname(path) |
| from chromite.lib import constants |
| |
| _CHROMITE_DIR = constants.CHROMITE_DIR |
| _IN_VENV = 'IN_CHROMITE_VENV' |
| |
| |
| if __name__ == '__main__': |
| if _IN_VENV in os.environ: |
| wrapper.DoMain() |
| else: |
| create_cmd = os.path.join(_CHROMITE_DIR, 'venv', 'create_env.sh') |
| cros_build_lib.RunCommand([create_cmd]) |
| python_cmd = os.path.join(_CHROMITE_DIR, 'venv', 'venv', 'bin', 'python') |
| cmd = [python_cmd] + sys.argv |
| o = cros_build_lib.RunCommand( |
| cmd, extra_env={_IN_VENV: '1'}, |
| mute_output=False, error_code_ok=True) |
| exit(o.returncode) |