~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/option.py

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
100
100
    return revs
101
101
 
102
102
 
 
103
def _parse_change_str(revstr):
 
104
    """Parse the revision string and return a tuple with left-most
 
105
    parent of the revision.
 
106
 
 
107
    >>> _parse_change_str('123')
 
108
    (<RevisionSpec_before before:123>, <RevisionSpec_revno 123>)
 
109
    >>> _parse_change_str('123..124')
 
110
    Traceback (most recent call last):
 
111
      ...
 
112
    RangeInChangeOption: Option --change does not accept revision ranges
 
113
    """
 
114
    revs = _parse_revision_str(revstr)
 
115
    if len(revs) > 1:
 
116
        raise errors.RangeInChangeOption()
 
117
    return (revisionspec.RevisionSpec.from_string('before:' + revstr),
 
118
            revs[0])
 
119
 
 
120
 
103
121
def _parse_merge_type(typestring):
104
122
    return get_merge_type(typestring)
105
123
 
133
151
    OPTIONS = {}
134
152
 
135
153
    def __init__(self, name, help='', type=None, argname=None,
136
 
                 short_name=None, custom_callback=None):
 
154
                 short_name=None, param_name=None, custom_callback=None):
137
155
        """Make a new command option.
138
156
 
139
157
        :param name: regular name of the command, used in the double-dash
140
158
            form and also as the parameter to the command's run() 
141
 
            method.
 
159
            method (unless param_name is specified).
142
160
 
143
161
        :param help: help message displayed in command help
144
162
 
150
168
        :param short_name: short option code for use with a single -, e.g.
151
169
            short_name="v" to enable parsing of -v.
152
170
 
 
171
        :param param_name: name of the parameter which will be passed to
 
172
            the command's run() method.
 
173
 
153
174
        :param custom_callback: a callback routine to be called after normal
154
175
            processing. The signature of the callback routine is
155
176
            (option, name, new_value, parser).
163
184
        elif argname is None:
164
185
            argname = 'ARG'
165
186
        self.argname = argname
 
187
        if param_name is None:
 
188
            self._param_name = self.name
 
189
        else:
 
190
            self._param_name = param_name
166
191
        self.custom_callback = custom_callback
167
192
 
168
193
    def short_name(self):
204
229
                              *option_strings)
205
230
 
206
231
    def _optparse_bool_callback(self, option, opt_str, value, parser, bool_v):
207
 
        setattr(parser.values, self.name, bool_v)
 
232
        setattr(parser.values, self._param_name, bool_v)
208
233
        if self.custom_callback is not None:
209
 
            self.custom_callback(option, self.name, bool_v, parser)
 
234
            self.custom_callback(option, self._param_name, bool_v, parser)
210
235
 
211
236
    def _optparse_callback(self, option, opt, value, parser):
212
237
        v = self.type(value)
213
 
        setattr(parser.values, self.name, v)
 
238
        setattr(parser.values, self._param_name, v)
214
239
        if self.custom_callback is not None:
215
240
            self.custom_callback(option, self.name, v, parser)
216
241
 
251
276
                          *option_strings)
252
277
 
253
278
    def _optparse_callback(self, option, opt, value, parser):
254
 
        values = getattr(parser.values, self.name)
 
279
        values = getattr(parser.values, self._param_name)
255
280
        if value == '-':
256
281
            del values[:]
257
282
        else:
258
283
            values.append(self.type(value))
259
284
        if self.custom_callback is not None:
260
 
            self.custom_callback(option, self.name, values, parser)
 
285
            self.custom_callback(option, self._param_name, values, parser)
261
286
 
262
287
 
263
288
class RegistryOption(Option):
344
369
    def _optparse_value_callback(self, cb_value):
345
370
        def cb(option, opt, value, parser):
346
371
            v = self.type(cb_value)
347
 
            setattr(parser.values, self.name, v)
 
372
            setattr(parser.values, self._param_name, v)
348
373
            if self.custom_callback is not None:
349
 
                self.custom_callback(option, self.name, v, parser)
 
374
                self.custom_callback(option, self._param_name, v, parser)
350
375
        return cb
351
376
 
352
377
    def iter_switches(self):
480
505
_global_option('revision',
481
506
               type=_parse_revision_str,
482
507
               short_name='r',
483
 
               help='See \'help revisionspec\' for details.')
 
508
               help='See "help revisionspec" for details.')
 
509
_global_option('change',
 
510
               type=_parse_change_str,
 
511
               short_name='c',
 
512
               param_name='revision',
 
513
               help='Select changes introduced by the specified revision. See also "help revisionspec".')
484
514
_global_option('show-ids',
485
515
               help='Show internal object ids.')
486
516
_global_option('timezone',