You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
# Copyright (c) 2011 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 for chromite tools.
|
|
|
|
The script is intend to be symlinked to any number of chromite tools, attempts
|
|
to find the path for chromite, and hands off to the right tool via exec if
|
|
possible.
|
|
|
|
It is intended to used strictly outside of the chroot.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
|
|
# Min version of Python that we *want*. We warn for older versions.
|
|
MIN_PYTHON_VER_SOFT = (3, 6)
|
|
# Min version of Python that we *require*. We abort for older versions.
|
|
MIN_PYTHON_VER_HARD = (3, 6)
|
|
|
|
|
|
def _FindChromite(path):
|
|
"""Find the chromite dir in a repo, gclient, or submodule checkout."""
|
|
path = os.path.abspath(path)
|
|
# Depending on the checkout type (whether repo chromeos or gclient chrome)
|
|
# Chromite lives in a different location.
|
|
roots = (
|
|
('.repo', 'chromite/.git'),
|
|
('.gclient', 'src/third_party/chromite/.git'),
|
|
('src/.gitmodules', 'src/third_party/chromite/.git'),
|
|
)
|
|
|
|
while path != '/':
|
|
for root, chromite_git_dir in roots:
|
|
if all(os.path.exists(os.path.join(path, x))
|
|
for x in [root, chromite_git_dir]):
|
|
return os.path.dirname(os.path.join(path, chromite_git_dir))
|
|
path = os.path.dirname(path)
|
|
return None
|
|
|
|
|
|
def _MissingErrorOut(target):
|
|
sys.stderr.write("""ERROR: Couldn't find the chromite tool %s.
|
|
|
|
Please change to a directory inside your Chromium OS source tree
|
|
and retry. If you need to setup a Chromium OS source tree, see
|
|
https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md
|
|
""" % target)
|
|
return 127
|
|
|
|
|
|
def _CheckPythonVersion():
|
|
"""Verify active Python is new enough."""
|
|
if sys.version_info >= MIN_PYTHON_VER_SOFT:
|
|
return
|
|
|
|
progname = os.path.basename(sys.argv[0])
|
|
print('%s: Chrome OS requires Python-%s+, but "%s" is "%s"' %
|
|
(progname, '.'.join(str(x) for x in MIN_PYTHON_VER_SOFT),
|
|
sys.executable, sys.version.replace('\n', ' ')),
|
|
file=sys.stderr)
|
|
if sys.version_info < MIN_PYTHON_VER_HARD:
|
|
print('%s: fatal: giving up since Python is too old.' % (progname,),
|
|
file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
print('warning: temporarily continuing anyways; you must upgrade soon to '
|
|
'maintain support.', file=sys.stderr)
|
|
|
|
|
|
def main():
|
|
_CheckPythonVersion()
|
|
|
|
chromite_dir = _FindChromite(os.getcwd())
|
|
target = os.path.basename(sys.argv[0])
|
|
if chromite_dir is None:
|
|
return _MissingErrorOut(target)
|
|
|
|
path = os.path.join(chromite_dir, 'bin', target)
|
|
os.execv(path, [path] + sys.argv[1:])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|