OLD | NEW |
1 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Implementation of the 'shell' chromite command.""" | 5 """Implementation of the 'shell' chromite command.""" |
6 | 6 |
7 # Python imports | 7 # Python imports |
8 import optparse | 8 import optparse |
9 import os | 9 import os |
10 | 10 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 # Parse options for command... | 86 # Parse options for command... |
87 # ...note that OptionParser will eat the '--' if it's there, which is what | 87 # ...note that OptionParser will eat the '--' if it's there, which is what |
88 # we want.. | 88 # we want.. |
89 usage_str = ('usage: %%prog [chromite_options] %s [options] [VAR=value] ' | 89 usage_str = ('usage: %%prog [chromite_options] %s [options] [VAR=value] ' |
90 '[-- command [arg1] [arg2] ...]') % raw_argv[0] | 90 '[-- command [arg1] [arg2] ...]') % raw_argv[0] |
91 parser = optparse.OptionParser(usage=usage_str) | 91 parser = optparse.OptionParser(usage=usage_str) |
92 (_, argv) = parser.parse_args(raw_argv[1:]) | 92 (_, argv) = parser.parse_args(raw_argv[1:]) |
93 | 93 |
94 # Enter the chroot if needed... | 94 # Enter the chroot if needed... |
95 if not cros_lib.IsInsideChroot(): | 95 if not cros_lib.IsInsideChroot(): |
96 self._oper.Info('ENTERING THE CHROOT') | |
97 utils.EnterChroot(chroot_config, (self, 'Run'), raw_argv) | 96 utils.EnterChroot(chroot_config, (self, 'Run'), raw_argv) |
98 else: | 97 else: |
99 # We'll put CWD as src/scripts when running the command. Since everyone | 98 # We'll put CWD as src/scripts when running the command. Since everyone |
100 # running by hand has their cwd there, it is probably the safest. | 99 # running by hand has their cwd there, it is probably the safest. |
101 cwd = os.path.join(utils.SRCROOT_PATH, 'src', 'scripts') | 100 cwd = os.path.join(utils.SRCROOT_PATH, 'src', 'scripts') |
102 | 101 |
103 # By default, no special environment... | 102 # By default, no special environment... |
104 env = None | 103 env = None |
105 | 104 |
106 if not argv: | 105 if not argv: |
107 # If no arguments, we'll just start bash. | 106 # If no arguments, we'll just start bash. |
108 argv = ['bash'] | 107 argv = ['bash'] |
109 else: | 108 else: |
110 # Parse the command line, looking at the beginning for VAR=value type | 109 # Parse the command line, looking at the beginning for VAR=value type |
111 # statements. I couldn't figure out a way to get bash to do this for | 110 # statements. I couldn't figure out a way to get bash to do this for |
112 # me. | 111 # me. |
113 user_env, argv = _SplitEnvFromArgs(argv) | 112 user_env, argv = _SplitEnvFromArgs(argv) |
114 if not argv: | 113 if not argv: |
115 cros_lib.Die('No command specified') | 114 cros_lib.Die('No command specified') |
116 | 115 |
117 # If there was some environment, use it to override the standard | 116 # If there was some environment, use it to override the standard |
118 # environment. | 117 # environment. |
119 if user_env: | 118 if user_env: |
120 env = dict(os.environ) | 119 env = dict(os.environ) |
121 env.update(user_env) | 120 env.update(user_env) |
122 | 121 |
123 # Don't show anything special for errors; we'll let the shell report them. | 122 # Don't show anything special for errors; we'll let the shell report them. |
124 # TODO(sjg) We don't use RunScript() here since this may become an | |
125 # interactive shell. Would prefer that this becomes its own command to | |
126 # avoid this problem. | |
127 cros_lib.RunCommand(argv, cwd=cwd, env=env, error_ok=True, | 123 cros_lib.RunCommand(argv, cwd=cwd, env=env, error_ok=True, |
128 ignore_sigint=True) | 124 ignore_sigint=True) |
OLD | NEW |