Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: bin/chromite

Issue 6312068: Allow CROS_WORKON_SRCROOT to be used outside the chroot. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/chromite.git@master
Patch Set: Bug fixes Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/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 # Python imports. 25 # Python imports.
26 import os 26 import os
27 import sys 27 import sys
28 28
29
30 def ReportChromiteError(message):
diandersAtChromium 2011/02/01 23:08:16 nit: Should probably start w/ _, since this is pri
31 print >>sys.stderr, (
32 "ERROR: Couldn't find the chromite tool.\n\n" + message +
33 "\n\nFor details and help, see:\n"
34 " http://www.chromium.org/chromium-os/developer-guide"
35 )
36
37
38 def TryChromiteShell(dir_, argv):
diandersAtChromium 2011/02/01 23:08:16 nit: Also start w/ underscore.
39 chromite_path = os.path.join(dir_, 'chromite', 'shell', 'main.py')
40 if os.path.isfile(chromite_path):
41 env = os.environ.copy()
42 try:
43 import chromite
44 except:
45 if 'PYTHONPATH' in env:
46 env['PYTHONPATH'] += ':%s' % dir_
47 else:
48 env['PYTHONPATH'] = dir_
49 # Exec the script, which will never return.
50 os.execve(chromite_path, argv, env)
51
52
29 if __name__ == '__main__': 53 if __name__ == '__main__':
30 # Look relative to CROS_WORKON_SRCROOT if that variable exists. This is 54 # Look relative to CROS_WORKON_SRCROOT if that variable exists.
31 # the "inside the chroot" case. 55 # Inside the chroot, this variable should always be set; outside
56 # the setting is optional.
32 if 'CROS_WORKON_SRCROOT' in os.environ: 57 if 'CROS_WORKON_SRCROOT' in os.environ:
33 chromite_path = os.path.join(os.environ['CROS_WORKON_SRCROOT'], 58 TryChromiteShell(os.environ['CROS_WORKON_SRCROOT'], sys.argv)
34 'chromite', 'shell', 'main.py') 59 ReportChromiteError(
35 if os.path.isfile(chromite_path): 60 "There is no chromite package in the path indicated by\n"
36 # Exec the script, which will never return. 61 "CROS_WORKON_SRCROOT. The variable may be set wrong, or you\n"
37 os.execv(chromite_path, sys.argv) 62 "may need to update your chroot.")
38 else: 63 sys.exit(1)
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 64
47 # Outside the chroot, search upward until the "parent" dir doesn't change 65 # We're outside the chroot and CROS_WORKON_SRCROOT isn't set.
48 # (on Linux, that means we're at '/'). That is an error case. 66 # Search upward until the parent dir doesn't change (on Linux,
49 dir = os.getcwd() 67 # that means we're at '/').
68 dir_ = os.getcwd()
50 prev_dir = None 69 prev_dir = None
51 while dir != prev_dir: 70 while dir_ != prev_dir:
52 chromite_path = os.path.join(dir, 'chromite', 'shell', 'main.py') 71 TryChromiteShell(dir_, sys.argv)
53 if os.path.isfile(chromite_path): 72 prev_dir = dir_
54 # Add the directory above chromite to PYTHONPATH before executing, so 73 dir_ = os.path.dirname(dir_)
55 # that "import chromite.abc.xyz" works... 74 ReportChromiteError(
56 env = os.environ.copy()
57 if 'PYTHONPATH' in env:
58 env['PYTHONPATH'] += ':%s' % dir
59 else:
60 env['PYTHONPATH'] = dir
61
62 # Exec the script, which will never return.
63 os.execve(chromite_path, sys.argv, env)
64
65 prev_dir = dir
66 dir = os.path.dirname(dir)
67
68 # TODO(dianders): Should we actually print out the 'repo init' call that
69 # the user should use?
70 print (
71 "ERROR: Couldn't find the chromite tool.\n"
72 "\n"
73 "Please change to a directory inside your Chromium OS source tree\n" 75 "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" 76 "and retry.")
75 " http://www.chromium.org/chromium-os/developer-guide"
76 )
77 sys.exit(1) 77 sys.exit(1)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698