~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
28
def shellcomplete_on_command(cmdname, outfile = None):
29
    cmdname = str(cmdname)
30
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
31
    if outfile is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
32
        outfile = sys.stdout
33
34
    from inspect import getdoc
35
    import commands
1185.1.9 by Robert Collins
Clint Adams patch for shell completion hints
36
    cmdobj = commands.get_cmd_object(cmdname)
1091 by Martin Pool
- new shell-complete command to help zsh completion
37
1185.1.9 by Robert Collins
Clint Adams patch for shell completion hints
38
    doc = getdoc(cmdobj)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
39
    if doc is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
40
        raise NotImplementedError("sorry, no detailed shellcomplete yet for %r" % cmdname)
41
1185.1.9 by Robert Collins
Clint Adams patch for shell completion hints
42
    shellcomplete_on_option(cmdobj.takes_options, outfile = None)
43
    for aname in cmdobj.takes_args:
44
        outfile.write(aname + '\n')
1091 by Martin Pool
- new shell-complete command to help zsh completion
45
46
1185.16.45 by Martin Pool
- refactor handling of short option names
47
def shellcomplete_on_option(options, outfile=None):
48
    from bzrlib.option import Option
1091 by Martin Pool
- new shell-complete command to help zsh completion
49
    if not options:
50
        return
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
51
    if outfile is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
52
        outfile = sys.stdout
53
    for on in options:
1185.16.45 by Martin Pool
- refactor handling of short option names
54
        for shortname, longname in Option.SHORT_OPTIONS.items():
1091 by Martin Pool
- new shell-complete command to help zsh completion
55
            if longname == on:
56
                l = '"(--' + on + ' -' + shortname + ')"{--' + on + ',-' + shortname + '}'
57
                break
58
	    else:
59
		l = '--' + on
60
        outfile.write(l + '\n')
61
62
63
def shellcomplete_commands(outfile = None):
64
    """List all commands"""
65
    import inspect
66
    import commands
67
    from inspect import getdoc
68
    
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
69
    if outfile is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
70
        outfile = sys.stdout
71
    
72
    cmds = []
73
    for cmdname, cmdclass in commands.get_all_cmds():
74
        cmds.append((cmdname, cmdclass))
75
	for alias in cmdclass.aliases:
76
	    cmds.append((alias, cmdclass))
77
    cmds.sort()
78
    for cmdname, cmdclass in cmds:
79
        if cmdclass.hidden:
80
            continue
81
        doc = getdoc(cmdclass)
1963.2.6 by Robey Pointer
pychecker is on crack; go back to using 'is None'.
82
        if doc is None:
1091 by Martin Pool
- new shell-complete command to help zsh completion
83
	    outfile.write(cmdname + '\n')
84
        else:
85
	    doclines = doc.splitlines()
86
	    firstline = doclines[0].lower()
87
	    outfile.write(cmdname + ':' + firstline[0:-1] + '\n')