~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/option.py

  • Committer: Mark Hammond
  • Date: 2009-01-12 01:55:34 UTC
  • mto: (3995.8.2 prepare-1.12)
  • mto: This revision was merged to the branch mainline in revision 4007.
  • Revision ID: mhammond@skippinet.com.au-20090112015534-yfxg50p7mpds9j4v
Include all .html files from the tortoise doc directory.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
# TODO: For things like --diff-prefix, we want a way to customize the display
18
18
# of the option argument.
40
40
    each revision specifier supplied.
41
41
 
42
42
    >>> _parse_revision_str('234')
43
 
    [<RevisionSpec_dwim 234>]
 
43
    [<RevisionSpec_revno 234>]
44
44
    >>> _parse_revision_str('234..567')
45
 
    [<RevisionSpec_dwim 234>, <RevisionSpec_dwim 567>]
 
45
    [<RevisionSpec_revno 234>, <RevisionSpec_revno 567>]
46
46
    >>> _parse_revision_str('..')
47
47
    [<RevisionSpec None>, <RevisionSpec None>]
48
48
    >>> _parse_revision_str('..234')
49
 
    [<RevisionSpec None>, <RevisionSpec_dwim 234>]
 
49
    [<RevisionSpec None>, <RevisionSpec_revno 234>]
50
50
    >>> _parse_revision_str('234..')
51
 
    [<RevisionSpec_dwim 234>, <RevisionSpec None>]
 
51
    [<RevisionSpec_revno 234>, <RevisionSpec None>]
52
52
    >>> _parse_revision_str('234..456..789') # Maybe this should be an error
53
 
    [<RevisionSpec_dwim 234>, <RevisionSpec_dwim 456>, <RevisionSpec_dwim 789>]
 
53
    [<RevisionSpec_revno 234>, <RevisionSpec_revno 456>, <RevisionSpec_revno 789>]
54
54
    >>> _parse_revision_str('234....789') #Error ?
55
 
    [<RevisionSpec_dwim 234>, <RevisionSpec None>, <RevisionSpec_dwim 789>]
 
55
    [<RevisionSpec_revno 234>, <RevisionSpec None>, <RevisionSpec_revno 789>]
56
56
    >>> _parse_revision_str('revid:test@other.com-234234')
57
57
    [<RevisionSpec_revid revid:test@other.com-234234>]
58
58
    >>> _parse_revision_str('revid:test@other.com-234234..revid:test@other.com-234235')
59
59
    [<RevisionSpec_revid revid:test@other.com-234234>, <RevisionSpec_revid revid:test@other.com-234235>]
60
60
    >>> _parse_revision_str('revid:test@other.com-234234..23')
61
 
    [<RevisionSpec_revid revid:test@other.com-234234>, <RevisionSpec_dwim 23>]
 
61
    [<RevisionSpec_revid revid:test@other.com-234234>, <RevisionSpec_revno 23>]
62
62
    >>> _parse_revision_str('date:2005-04-12')
63
63
    [<RevisionSpec_date date:2005-04-12>]
64
64
    >>> _parse_revision_str('date:2005-04-12 12:24:33')
68
68
    >>> _parse_revision_str('date:2005-04-12,12:24:33')
69
69
    [<RevisionSpec_date date:2005-04-12,12:24:33>]
70
70
    >>> _parse_revision_str('-5..23')
71
 
    [<RevisionSpec_dwim -5>, <RevisionSpec_dwim 23>]
 
71
    [<RevisionSpec_revno -5>, <RevisionSpec_revno 23>]
72
72
    >>> _parse_revision_str('-5')
73
 
    [<RevisionSpec_dwim -5>]
 
73
    [<RevisionSpec_revno -5>]
74
74
    >>> _parse_revision_str('123a')
75
 
    [<RevisionSpec_dwim 123a>]
 
75
    Traceback (most recent call last):
 
76
      ...
 
77
    NoSuchRevisionSpec: No namespace registered for string: '123a'
76
78
    >>> _parse_revision_str('abc')
77
 
    [<RevisionSpec_dwim abc>]
 
79
    Traceback (most recent call last):
 
80
      ...
 
81
    NoSuchRevisionSpec: No namespace registered for string: 'abc'
78
82
    >>> _parse_revision_str('branch:../branch2')
79
83
    [<RevisionSpec_branch branch:../branch2>]
80
84
    >>> _parse_revision_str('branch:../../branch2')
81
85
    [<RevisionSpec_branch branch:../../branch2>]
82
86
    >>> _parse_revision_str('branch:../../branch2..23')
83
 
    [<RevisionSpec_branch branch:../../branch2>, <RevisionSpec_dwim 23>]
 
87
    [<RevisionSpec_branch branch:../../branch2>, <RevisionSpec_revno 23>]
84
88
    >>> _parse_revision_str('branch:..\\\\branch2')
85
89
    [<RevisionSpec_branch branch:..\\branch2>]
86
90
    >>> _parse_revision_str('branch:..\\\\..\\\\branch2..23')
87
 
    [<RevisionSpec_branch branch:..\\..\\branch2>, <RevisionSpec_dwim 23>]
 
91
    [<RevisionSpec_branch branch:..\\..\\branch2>, <RevisionSpec_revno 23>]
88
92
    """
89
93
    # TODO: Maybe move this into revisionspec.py
90
94
    revs = []
100
104
    parent of the revision.
101
105
 
102
106
    >>> _parse_change_str('123')
103
 
    (<RevisionSpec_before before:123>, <RevisionSpec_dwim 123>)
 
107
    (<RevisionSpec_before before:123>, <RevisionSpec_revno 123>)
104
108
    >>> _parse_change_str('123..124')
105
109
    Traceback (most recent call last):
106
110
      ...
132
136
 
133
137
class Option(object):
134
138
    """Description of a command line option
135
 
 
 
139
    
136
140
    :ivar _short_name: If this option has a single-letter name, this is it.
137
141
    Otherwise None.
138
142
    """
146
150
    OPTIONS = {}
147
151
 
148
152
    def __init__(self, name, help='', type=None, argname=None,
149
 
                 short_name=None, param_name=None, custom_callback=None,
150
 
                 hidden=False):
 
153
                 short_name=None, param_name=None, custom_callback=None):
151
154
        """Make a new command option.
152
155
 
153
156
        :param name: regular name of the command, used in the double-dash
154
 
            form and also as the parameter to the command's run()
 
157
            form and also as the parameter to the command's run() 
155
158
            method (unless param_name is specified).
156
159
 
157
160
        :param help: help message displayed in command help
158
161
 
159
 
        :param type: function called to parse the option argument, or
 
162
        :param type: function called to parse the option argument, or 
160
163
            None (default) if this option doesn't take an argument.
161
164
 
162
165
        :param argname: name of option argument, if any
170
173
        :param custom_callback: a callback routine to be called after normal
171
174
            processing. The signature of the callback routine is
172
175
            (option, name, new_value, parser).
173
 
        :param hidden: If True, the option should be hidden in help and
174
 
            documentation.
175
176
        """
176
177
        self.name = name
177
178
        self.help = help
188
189
        else:
189
190
            self._param_name = param_name
190
191
        self.custom_callback = custom_callback
191
 
        self.hidden = hidden
192
192
 
193
193
    def short_name(self):
194
194
        if self._short_name:
208
208
        option_strings = ['--%s' % self.name]
209
209
        if short_name is not None:
210
210
            option_strings.append('-%s' % short_name)
211
 
        if self.hidden:
212
 
            help = optparse.SUPPRESS_HELP
213
 
        else:
214
 
            help = self.help
215
211
        optargfn = self.type
216
212
        if optargfn is None:
217
213
            parser.add_option(action='callback',
218
214
                              callback=self._optparse_bool_callback,
219
215
                              callback_args=(True,),
220
 
                              help=help,
 
216
                              help=self.help,
221
217
                              *option_strings)
222
218
            negation_strings = ['--%s' % self.get_negation_name()]
223
219
            parser.add_option(action='callback',
228
224
            parser.add_option(action='callback',
229
225
                              callback=self._optparse_callback,
230
226
                              type='string', metavar=self.argname.upper(),
231
 
                              help=help,
 
227
                              help=self.help,
232
228
                              default=OptionParser.DEFAULT_VALUE,
233
229
                              *option_strings)
234
230
 
245
241
 
246
242
    def iter_switches(self):
247
243
        """Iterate through the list of switches provided by the option
248
 
 
 
244
        
249
245
        :return: an iterator of (name, short_name, argname, help)
250
246
        """
251
247
        argname =  self.argname
254
250
        yield self.name, self.short_name(), argname, self.help
255
251
 
256
252
    def is_hidden(self, name):
257
 
        return self.hidden
 
253
        return False
258
254
 
259
255
 
260
256
class ListOption(Option):
353
349
        if self._registry is None:
354
350
            self._registry = self._lazy_registry.get_obj()
355
351
        return self._registry
356
 
 
 
352
    
357
353
    @staticmethod
358
354
    def from_kwargs(name_, help=None, title=None, value_switches=False,
359
355
                    enum_switch=True, **kwargs):
506
502
# Declare the standard options
507
503
_standard_option('help', short_name='h',
508
504
                 help='Show help message.')
509
 
_standard_option('usage',
510
 
                 help='Show usage message and options.')
511
505
_standard_option('verbose', short_name='v',
512
506
                 help='Display more information.',
513
507
                 custom_callback=_verbosity_level_callback)