~bzr-pqm/bzr/bzr.dev

2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1091 by Martin Pool
- new shell-complete command to help zsh completion
17
import sys
18
19
20
def shellcomplete(context=None, outfile = None):
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
21
    if outfile is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
22
        outfile = sys.stdout
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
23
    if context is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
24
        shellcomplete_commands(outfile = outfile)
25
    else:
26
        shellcomplete_on_command(context, outfile = outfile)
27
2190.2.1 by Martin Pool
remove global registration of short options
28
29
def shellcomplete_on_command(cmdname, outfile=None):
1091 by Martin Pool
- new shell-complete command to help zsh completion
30
    cmdname = str(cmdname)
31
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
32
    if outfile is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
33
        outfile = sys.stdout
34
35
    from inspect import getdoc
36
    import commands
1185.1.9 by Robert Collins
Clint Adams patch for shell completion hints
37
    cmdobj = commands.get_cmd_object(cmdname)
1091 by Martin Pool
- new shell-complete command to help zsh completion
38
1185.1.9 by Robert Collins
Clint Adams patch for shell completion hints
39
    doc = getdoc(cmdobj)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
40
    if doc is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
41
        raise NotImplementedError("sorry, no detailed shellcomplete yet for %r" % cmdname)
42
2190.2.1 by Martin Pool
remove global registration of short options
43
    shellcomplete_on_options(cmdobj.options().values(), outfile=outfile)
1185.1.9 by Robert Collins
Clint Adams patch for shell completion hints
44
    for aname in cmdobj.takes_args:
45
        outfile.write(aname + '\n')
1091 by Martin Pool
- new shell-complete command to help zsh completion
46
47
2190.2.1 by Martin Pool
remove global registration of short options
48
def shellcomplete_on_options(options, outfile=None):
49
    for opt in options:
50
        if opt.short_name:
51
            outfile.write('"(--%s -%s)"{--%s,-%s}\n'
2279.2.1 by mbp at sourcefrog
(trivial) fix short_name() call in shellcomplete
52
                    % (opt.name, opt.short_name(), opt.name, opt.short_name()))
2190.2.1 by Martin Pool
remove global registration of short options
53
        else:
54
            outfile.write('--%s\n' % opt.name)
1091 by Martin Pool
- new shell-complete command to help zsh completion
55
56
57
def shellcomplete_commands(outfile = None):
58
    """List all commands"""
59
    import inspect
60
    import commands
61
    from inspect import getdoc
62
    
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
63
    if outfile is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
64
        outfile = sys.stdout
65
    
66
    cmds = []
67
    for cmdname, cmdclass in commands.get_all_cmds():
68
        cmds.append((cmdname, cmdclass))
2120.2.1 by John Arbash Meinel
Remove tabs from source files, and add a test to keep it that way.
69
        for alias in cmdclass.aliases:
70
            cmds.append((alias, cmdclass))
1091 by Martin Pool
- new shell-complete command to help zsh completion
71
    cmds.sort()
72
    for cmdname, cmdclass in cmds:
73
        if cmdclass.hidden:
74
            continue
75
        doc = getdoc(cmdclass)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
76
        if doc is None:
2120.2.1 by John Arbash Meinel
Remove tabs from source files, and add a test to keep it that way.
77
            outfile.write(cmdname + '\n')
1091 by Martin Pool
- new shell-complete command to help zsh completion
78
        else:
2120.2.1 by John Arbash Meinel
Remove tabs from source files, and add a test to keep it that way.
79
            doclines = doc.splitlines()
80
            firstline = doclines[0].lower()
81
            outfile.write(cmdname + ':' + firstline[0:-1] + '\n')