~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to shell.py

  • Committer: Aaron Bentley
  • Date: 2006-08-23 19:35:22 UTC
  • Revision ID: abentley@panoramicfeedback.com-20060823193522-72394d6f9630b105
Update version check message

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import os
21
21
import readline
22
22
import shlex
 
23
import stat
23
24
import string
24
25
import sys
25
26
 
26
27
from bzrlib.branch import Branch
27
28
from bzrlib.commands import get_cmd_object, get_all_cmds, get_alias
28
29
from bzrlib.errors import BzrError
 
30
from bzrlib.workingtree import WorkingTree
29
31
 
30
32
import terminal
31
33
 
64
66
 
65
67
    def get_completions_or_raise(self):
66
68
        if self.command is None:
67
 
            iter = (c+" " for c in iter_command_names() if
68
 
                    c not in COMPLETION_BLACKLIST)
 
69
            if '/' in self.text:
 
70
                iter = iter_executables(self.text)
 
71
            else:
 
72
                iter = (c+" " for c in iter_command_names() if
 
73
                        c not in COMPLETION_BLACKLIST)
69
74
            return list(filter_completions(iter, self.text))
70
75
        if self.prev_opt is None:
71
76
            completions = self.get_option_completions()
74
79
                completions.extend(list(filter_completions(iter, self.text)))
75
80
            else:
76
81
                iter = iter_file_completions(self.text)
77
 
                completions.extend([f+" " for f in 
78
 
                                    filter_completions(iter, self.text)])
 
82
                completions.extend(filter_completions(iter, self.text))
79
83
            return completions 
80
84
 
81
85
 
119
123
        if self.tree is not None:
120
124
            try:
121
125
                prompt_data = (self.tree.branch.nick, self.tree.branch.revno(), 
122
 
                               self.tree.branch.relpath('.'))
 
126
                               self.tree.relpath('.'))
123
127
                prompt = " %s:%d/%s" % prompt_data
124
128
            except:
125
129
                prompt = ""
259
263
                userfile+='/'
260
264
                yield userfile
261
265
            elif not only_dirs:
262
 
                yield userfile
 
266
                yield userfile + ' '
263
267
 
264
268
 
265
269
def iter_dir_completions(arg):
281
285
                yield name
282
286
 
283
287
 
 
288
def iter_executables(path):
 
289
    dirname, partial = os.path.split(path)
 
290
    for filename in os.listdir(dirname):
 
291
        if not filename.startswith(partial):
 
292
            continue
 
293
        fullpath = os.path.join(dirname, filename)
 
294
        mode=os.lstat(fullpath)[stat.ST_MODE]
 
295
        if stat.S_ISREG(mode) and 0111 & mode:
 
296
            yield fullpath + ' '
 
297
 
 
298
 
284
299
def filter_completions(iter, arg):
285
300
    return (c for c in iter if c.startswith(arg))
286
301