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.7 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.7 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.
 | 
						|
# TODO(vapier): Hard require Python 3.6 by end of 2020.
 | 
						|
MIN_PYTHON_VER_HARD = (3, 4)
 | 
						|
 | 
						|
 | 
						|
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 found "%s"' %
 | 
						|
        (progname, '.'.join(str(x) for x in MIN_PYTHON_VER_SOFT),
 | 
						|
         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())
 |