~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to shell.py

  • Committer: Aaron Bentley
  • Date: 2006-03-16 05:48:38 UTC
  • mfrom: (321.2.5 bzrtools)
  • Revision ID: aaron.bentley@utoronto.ca-20060316054838-a59dfe944c17b493
Got push working with new-format branches

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
#    You should have received a copy of the GNU General Public License
15
15
#    along with this program; if not, write to the Free Software
16
16
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
 
 
18
17
import cmd
19
 
from itertools import chain
 
18
import sys
20
19
import os
 
20
import terminal
21
21
import readline
22
 
import shlex
23
22
import string
24
 
import sys
25
 
 
 
23
from itertools import chain
 
24
from bzrlib.errors import BzrError
 
25
from bzrlib.commands import get_cmd_object, get_all_cmds, get_alias
26
26
from bzrlib.branch import Branch
27
 
from bzrlib.commands import get_cmd_object, get_all_cmds, get_alias
28
 
from bzrlib.errors import BzrError
29
 
 
30
 
import terminal
31
 
 
32
27
 
33
28
SHELL_BLACKLIST = set(['rm', 'ls'])
34
29
COMPLETION_BLACKLIST = set(['shell'])
35
30
 
36
 
 
37
31
class BlackListedCommand(BzrError):
38
32
    def __init__(self, command):
39
33
        BzrError.__init__(self, "The command %s is blacklisted for shell use" %
40
34
                          command)
41
35
 
42
 
 
43
36
class CompletionContext(object):
44
37
    def __init__(self, text, command=None, prev_opt=None, arg_pos=None):
45
38
        self.text = text
160
153
        self.default("help "+line)
161
154
 
162
155
    def default(self, line):
163
 
        args = shlex.split(line)
 
156
        args = line.split()
164
157
        alias_args = get_alias(args[0])
165
158
        if alias_args is not None:
166
159
            args[0] = alias_args.pop(0)
211
204
            cmd = None
212
205
        return CompletionContext(text, command=cmd).get_completions()
213
206
 
214
 
 
215
207
def run_shell():
216
208
    try:
217
209
        prompt = PromptCmd()
222
214
    except StopIteration:
223
215
        pass
224
216
 
225
 
 
226
217
def iter_opt_completions(command_obj):
227
218
    for option_name, option in command_obj.options().items():
228
219
        yield "--" + option_name
230
221
        if short_name:
231
222
            yield "-" + short_name
232
223
 
233
 
 
234
224
def iter_file_completions(arg, only_dirs = False):
235
225
    """Generate an iterator that iterates through filename completions.
236
226
 
270
260
    """
271
261
    return iter_file_completions(arg, True)
272
262
 
273
 
 
274
263
def iter_command_names(hidden=False):
275
264
    for real_cmd_name, cmd_class in get_all_cmds():
276
265
        if not hidden and cmd_class.hidden:
280
269
            if name == real_cmd_name or not real_cmd_name.startswith(name):
281
270
                yield name
282
271
 
283
 
 
284
272
def filter_completions(iter, arg):
285
273
    return (c for c in iter if c.startswith(arg))
286
274
 
287
 
 
288
275
def iter_munged_completions(iter, arg, text):
289
276
    for completion in iter:
290
277
        completion = str(completion)
291
278
        if completion.startswith(arg):
292
279
            yield completion[len(arg)-len(text):]+" "
293
280
 
294
 
 
295
281
def too_complicated(line):
296
 
    for char in '|<>*?':
 
282
    for char in '|<>"\"*?':
297
283
        if char in line:
298
284
            return True
299
285
    return False