Commit e92854e4 authored by maruel@chromium.org's avatar maruel@chromium.org

Add chromite wrapper to depot_tools.

This file is a copy of the chromite wrapper that lives here:
  http://git.chromium.org/gitweb/?p=chromite.git;a=blob;f=bin/chromite

Anush requested that this wrapper be placed into depot_tools so
that users will get the wrapper in their path.  The wrapper will go
and find the real version of chromite based on the CWD.

Patch contributed by dianders@chromium.org.

Review URL: http://codereview.chromium.org/6299018

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@73011 0039d316-1c4b-4281-b951-d872f2087c98
parent cca55826
#!/usr/bin/python
# 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 the chromite shell.
This script is intended to run in several ways:
- Outside the chroot, it should be _copied_ to someplace that is in the
path (like depot_tools). It will search for the right chromite by looking
for a file 'chromite/shell/main.py' upward based on the CWD.
- Inside the chroot, it might be _either_ copied to someplace in the path (since
depot_tools is in the path in the chroot) or it might run from chromite/bin
directly, which should be in the PATH. In any case, we'll look for the
real 'chromite/shell/main.py' based on the environment variable
CROS_WORKON_SRCROOT, so it doesn't matter what the CWD is.
If you're looking at a copy and want to know where the original looks at, look
here:
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)
# 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
# Exec the script, which will never return.
os.execve(chromite_path, sys.argv, env)
prev_dir = dir
dir = os.path.dirname(dir)
# TODO(dianders): Should we actually print out the 'repo init' call that
# the user should use?
print (
"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"
)
sys.exit(1)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment