Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Wrapper for the chromite shell. | 6 """Wrapper for the chromite shell. |
| 7 | 7 |
| 8 This script is intended to run in several ways: | 8 This script is intended to run in several ways: |
| 9 - Outside the chroot, it should be _copied_ to someplace that is in the | 9 - Outside the chroot, it should be _copied_ to someplace that is in the |
| 10 path (like depot_tools). It will search for the right chromite by looking | 10 path (like depot_tools). It will search for the right chromite by looking |
| 11 for a file 'chromite/shell/main.py' upward based on the CWD. | 11 for a file 'chromite/shell/main.py' upward based on the CWD. |
| 12 - Inside the chroot, it might be _either_ copied to someplace in the path (since | 12 - Inside the chroot, it might be _either_ copied to someplace in the path (since |
| 13 depot_tools is in the path in the chroot) or it might run from chromite/bin | 13 depot_tools is in the path in the chroot) or it might run from chromite/bin |
| 14 directly, which should be in the PATH. In any case, we'll look for the | 14 directly, which should be in the PATH. In any case, we'll look for the |
| 15 real 'chromite/shell/main.py' based on the environment variable | 15 real 'chromite/shell/main.py' based on the environment variable |
| 16 CROS_WORKON_SRCROOT, so it doesn't matter what the CWD is. | 16 CROS_WORKON_SRCROOT, so it doesn't matter what the CWD is. |
| 17 | 17 |
| 18 If you're looking at a copy and want to know where the original looks at, look | 18 If you're looking at a copy and want to know where the original looks at, look |
| 19 here: | 19 here: |
| 20 http://git.chromium.org/gitweb/?p=chromite.git;a=blob;f=bin/chromite | 20 http://git.chromium.org/gitweb/?p=chromite.git;a=blob;f=bin/chromite |
| 21 | 21 |
| 22 Since this script is _copied_, it should remain small and not use internal libs. | 22 Since this script is _copied_, it should remain small and not use internal libs. |
| 23 | |
| 23 """ | 24 """ |
| 24 | 25 |
| 25 # Python imports. | 26 # Python imports. |
| 26 import os | 27 import os |
| 27 import sys | 28 import sys |
| 28 | 29 |
| 29 if __name__ == '__main__': | 30 def Search(path): |
| 30 # Look relative to CROS_WORKON_SRCROOT if that variable exists. This is | 31 """Return an iterator of places to look for chromite.""" |
| 31 # the "inside the chroot" case. | |
| 32 if 'CROS_WORKON_SRCROOT' in os.environ: | |
| 33 chromite_path = os.path.join(os.environ['CROS_WORKON_SRCROOT'], | |
| 34 'chromite', 'shell', 'main.py') | |
| 35 if os.path.isfile(chromite_path): | |
| 36 # Exec the script, which will never return. | |
| 37 os.execv(chromite_path, sys.argv) | |
| 38 else: | |
| 39 print ( | |
| 40 "ERROR: Couldn't find the chromite tool.\n" | |
| 41 "\n" | |
| 42 "You may need to update your chroot. If you need help, see:\n" | |
| 43 " http://www.chromium.org/chromium-os/developer-guide" | |
| 44 ) | |
| 45 sys.exit(1) | |
| 46 | 32 |
|
diandersAtChromium
2011/02/03 00:44:22
Please make it so that if chromite is already in t
Kenneth Waters
2011/02/03 18:16:41
jrbarnette wanted it this way.
diandersAtChromium
2011/02/03 18:36:01
Talked to jrbarnette. You can push this CL as is.
| |
| 47 # Outside the chroot, search upward until the "parent" dir doesn't change | 33 # Look in $CROS_WORKON_SRCROOT first. |
| 48 # (on Linux, that means we're at '/'). That is an error case. | 34 yield os.environ.get('CROS_WORKON_SRCROOT', '') |
| 49 dir = os.getcwd() | |
| 50 prev_dir = None | |
| 51 while dir != prev_dir: | |
| 52 chromite_path = os.path.join(dir, 'chromite', 'shell', 'main.py') | |
| 53 if os.path.isfile(chromite_path): | |
| 54 # Add the directory above chromite to PYTHONPATH before executing, so | |
| 55 # that "import chromite.abc.xyz" works... | |
| 56 env = os.environ.copy() | |
| 57 if 'PYTHONPATH' in env: | |
| 58 env['PYTHONPATH'] += ':%s' % dir | |
| 59 else: | |
| 60 env['PYTHONPATH'] = dir | |
| 61 | 35 |
| 62 # Exec the script, which will never return. | 36 # Search upward until we either end up with a blank dir or the "parent" dir |
| 63 os.execve(chromite_path, sys.argv, env) | 37 # doesn't change. |
| 38 prev_path = None | |
| 39 while path and path != prev_path: | |
| 40 yield path | |
| 41 path, prev_path = os.path.dirname(path), path | |
| 64 | 42 |
| 65 prev_dir = dir | |
| 66 dir = os.path.dirname(dir) | |
| 67 | 43 |
| 44 sys.path.insert(0, '') | |
|
diandersAtChromium
2011/02/03 00:44:22
Please don't add ever '' into the path. This make
Kenneth Waters
2011/02/03 18:16:41
I was partially confused by by what interactive py
| |
| 45 for path in Search(os.getcwd()): | |
| 46 sys.path[0] = path | |
| 47 try: | |
| 48 import chromite.shell.main | |
| 49 break | |
| 50 except ImportError: | |
| 51 pass | |
| 52 else: | |
| 68 # TODO(dianders): Should we actually print out the 'repo init' call that | 53 # TODO(dianders): Should we actually print out the 'repo init' call that |
| 69 # the user should use? | 54 # the user should use? |
| 70 print ( | 55 sys.stderr.write( |
| 71 "ERROR: Couldn't find the chromite tool.\n" | 56 "ERROR: Couldn't find the chromite tool.\n" |
| 72 "\n" | 57 "\n" |
| 73 "Please change to a directory inside your Chromium OS source tree\n" | 58 "Please change to a directory inside your Chromium OS source tree\n" |
| 74 "and retry. If you need to setup a Chromium OS source tree, see:\n" | 59 "and retry. If you need to setup a Chromium OS source tree, see:\n" |
| 75 " http://www.chromium.org/chromium-os/developer-guide" | 60 " http://www.chromium.org/chromium-os/developer-guide\n") |
| 76 ) | |
| 77 sys.exit(1) | 61 sys.exit(1) |
| 62 | |
| 63 chromite.shell.main.main() | |
| 64 sys.exit(0) | |
|
diandersAtChromium
2011/02/03 00:44:22
Can we remove this sys.exit(0)? ...if not, can yo
Kenneth Waters
2011/02/03 18:16:41
legacy. removed.
| |
| OLD | NEW |