| Index: chromite
|
| ===================================================================
|
| --- chromite (revision 74067)
|
| +++ chromite (working copy)
|
| @@ -20,58 +20,55 @@
|
| http://git.chromium.org/gitweb/?p=chromite.git;a=blob;f=bin/chromite
|
|
|
| Since this script is _copied_, it should remain small and not use internal libs.
|
| +
|
| """
|
|
|
| # Python imports.
|
| import os
|
| import sys
|
|
|
| -if __name__ == '__main__':
|
| - # Look relative to CROS_WORKON_SRCROOT if that variable exists. This is
|
| - # the "inside the chroot" case.
|
| - if 'CROS_WORKON_SRCROOT' in os.environ:
|
| - chromite_path = os.path.join(os.environ['CROS_WORKON_SRCROOT'],
|
| - 'chromite', 'shell', 'main.py')
|
| - if os.path.isfile(chromite_path):
|
| - # Exec the script, which will never return.
|
| - os.execv(chromite_path, sys.argv)
|
| - else:
|
| - print (
|
| - "ERROR: Couldn't find the chromite tool.\n"
|
| - "\n"
|
| - "You may need to update your chroot. If you need help, see:\n"
|
| - " http://www.chromium.org/chromium-os/developer-guide"
|
| - )
|
| - sys.exit(1)
|
| +def Search(path):
|
| + """Return an iterator of lists of places to look for chromite."""
|
|
|
| - # Outside the chroot, search upward until the "parent" dir doesn't change
|
| - # (on Linux, that means we're at '/'). That is an error case.
|
| - dir = os.getcwd()
|
| - prev_dir = None
|
| - while dir != prev_dir:
|
| - chromite_path = os.path.join(dir, 'chromite', 'shell', 'main.py')
|
| - if os.path.isfile(chromite_path):
|
| - # Add the directory above chromite to PYTHONPATH before executing, so
|
| - # that "import chromite.abc.xyz" works...
|
| - env = os.environ.copy()
|
| - if 'PYTHONPATH' in env:
|
| - env['PYTHONPATH'] += ':%s' % dir
|
| - else:
|
| - env['PYTHONPATH'] = dir
|
| + if os.path.exists('/etc/debian_chroot'):
|
| + # We're in the chroot. Chromite should be in the python path inside the
|
| + # chroot, so we don't do any searching. NOTE that we purposely don't want
|
| + # CROS_WORKON_SRCROOT in the python path.
|
| + yield []
|
| + else:
|
| + # Look in $CROS_WORKON_SRCROOT first. The idea is that a user would set
|
| + # this manually if they wanted to specify a particular version of chromite.
|
| + if 'CROS_WORKON_SRCROOT' in os.environ:
|
| + yield [os.environ['CROS_WORKON_SRCROOT']]
|
|
|
| - # Exec the script, which will never return.
|
| - os.execve(chromite_path, sys.argv, env)
|
| + # Search upward until we either end up with a blank dir or the "parent" dir
|
| + # doesn't change.
|
| + prev_path = None
|
| + while path and path != prev_path:
|
| + yield [path]
|
| + path, prev_path = os.path.dirname(path), path
|
|
|
| - prev_dir = dir
|
| - dir = os.path.dirname(dir)
|
|
|
| +for path in Search(os.getcwd()):
|
| + sys.path = path + sys.path
|
| + try:
|
| + import chromite.shell.main
|
| + break
|
| + except ImportError, e:
|
| + # We've got different modules named chromite in the tree, pulling in the
|
| + # wrong one will break the right one. So unload it.
|
| + if 'chromite' in sys.modules:
|
| + del sys.modules['chromite']
|
| + sys.path = sys.path[len(path):]
|
| +else:
|
| # TODO(dianders): Should we actually print out the 'repo init' call that
|
| # the user should use?
|
| - print (
|
| + sys.stderr.write(
|
| "ERROR: Couldn't find the chromite tool.\n"
|
| "\n"
|
| "Please change to a directory inside your Chromium OS source tree\n"
|
| "and retry. If you need to setup a Chromium OS source tree, see:\n"
|
| - " http://www.chromium.org/chromium-os/developer-guide"
|
| - )
|
| + " http://www.chromium.org/chromium-os/developer-guide\n")
|
| sys.exit(1)
|
| +
|
| +chromite.shell.main.main()
|
|
|