/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/shellcomplete.py

  • Committer: John Arbash Meinel
  • Date: 2006-07-18 18:57:54 UTC
  • mto: This revision was merged to the branch mainline in revision 1868.
  • Revision ID: john@arbash-meinel.com-20060718185754-4007745748e28db9
Commit timestamp restricted to 1ms precision.

The old code would restrict to 1s resolution if the timestamp was
supplied, while it preserved full resolution if the timestamp was
auto generated. Now both paths preserve only 1ms resolution.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import sys
 
2
 
 
3
 
 
4
def shellcomplete(context=None, outfile = None):
 
5
    if outfile == None:
 
6
        outfile = sys.stdout
 
7
    if context == None:
 
8
        shellcomplete_commands(outfile = outfile)
 
9
    else:
 
10
        shellcomplete_on_command(context, outfile = outfile)
 
11
 
 
12
def shellcomplete_on_command(cmdname, outfile = None):
 
13
    cmdname = str(cmdname)
 
14
 
 
15
    if outfile == None:
 
16
        outfile = sys.stdout
 
17
 
 
18
    from inspect import getdoc
 
19
    import commands
 
20
    cmdobj = commands.get_cmd_object(cmdname)
 
21
 
 
22
    doc = getdoc(cmdobj)
 
23
    if doc == None:
 
24
        raise NotImplementedError("sorry, no detailed shellcomplete yet for %r" % cmdname)
 
25
 
 
26
    shellcomplete_on_option(cmdobj.takes_options, outfile = None)
 
27
    for aname in cmdobj.takes_args:
 
28
        outfile.write(aname + '\n')
 
29
 
 
30
 
 
31
def shellcomplete_on_option(options, outfile=None):
 
32
    from bzrlib.option import Option
 
33
    if not options:
 
34
        return
 
35
    if outfile == None:
 
36
        outfile = sys.stdout
 
37
    for on in options:
 
38
        for shortname, longname in Option.SHORT_OPTIONS.items():
 
39
            if longname == on:
 
40
                l = '"(--' + on + ' -' + shortname + ')"{--' + on + ',-' + shortname + '}'
 
41
                break
 
42
            else:
 
43
                l = '--' + on
 
44
        outfile.write(l + '\n')
 
45
 
 
46
 
 
47
def shellcomplete_commands(outfile = None):
 
48
    """List all commands"""
 
49
    import inspect
 
50
    import commands
 
51
    from inspect import getdoc
 
52
    
 
53
    if outfile == None:
 
54
        outfile = sys.stdout
 
55
    
 
56
    cmds = []
 
57
    for cmdname, cmdclass in commands.get_all_cmds():
 
58
        cmds.append((cmdname, cmdclass))
 
59
        for alias in cmdclass.aliases:
 
60
            cmds.append((alias, cmdclass))
 
61
    cmds.sort()
 
62
    for cmdname, cmdclass in cmds:
 
63
        if cmdclass.hidden:
 
64
            continue
 
65
        doc = getdoc(cmdclass)
 
66
        if doc == None:
 
67
            outfile.write(cmdname + '\n')
 
68
        else:
 
69
            doclines = doc.splitlines()
 
70
            firstline = doclines[0].lower()
 
71
            outfile.write(cmdname + ':' + firstline[0:-1] + '\n')