Chromium Code Reviews| Index: chromite |
| =================================================================== |
| --- chromite (revision 0) |
| +++ chromite (revision 0) |
| @@ -0,0 +1,72 @@ |
| +#!/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; note that python will |
| + # replace argv[0] with chromite_path when called, so we'll lose |
| + # the name of / path to this wrapper. |
|
Mandeep Singh Baines
2011/01/27 00:16:09
This comment seems obvious (unnecessary). Its also
diandersAtChromium
2011/01/27 00:29:31
LOL. davidjames thought that the argv[0] stuff wa
|
| + os.execv(chromite_path, sys.argv) |
| + |
| + # Outside the chroot, search upward until we either end up with a blank dir |
| + # or the "parent" dir doesn't change. Either of those is an error case. |
|
Mandeep Singh Baines
2011/01/27 00:16:09
Not sure I like these semantics. Semantics would b
diandersAtChromium
2011/01/27 00:29:31
Good point. I will make it an error case.
On 201
|
| + dir = os.getcwd() |
| + prev_dir = None |
| + while dir and dir != prev_dir: |
|
Mandeep Singh Baines
2011/01/27 00:16:09
I don't see how dir could ever being blank. I don'
diandersAtChromium
2011/01/27 00:29:31
I guess I've been doing cross-platform stuff too l
|
| + 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; note that python will |
| + # replace argv[0] with chromite_path when called, so we'll lose |
| + # the name of / path to this wrapper. |
| + 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" |
| + ) |
| Property changes on: chromite |
| ___________________________________________________________________ |
| Added: svn:executable |
| + * |