~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

- clean up handling of option objects
- add help for commit --file
- test for this

Show diffs side-by-side

added added

removed removed

Lines of Context:
158
158
        repeated, etc.
159
159
 
160
160
    takes_options
161
 
        List of options that may be given for this command.
 
161
        List of options that may be given for this command.  These can
 
162
        be either strings, referring to globally-defined options,
 
163
        or option objects.  Retrieve through options().
162
164
 
163
165
    hidden
164
166
        If true, this command isn't advertised.  This is typically
165
167
        for commands intended for expert users.
166
168
    """
167
169
    aliases = []
168
 
    
169
170
    takes_args = []
170
171
    takes_options = []
171
172
 
176
177
        if self.__doc__ == Command.__doc__:
177
178
            warn("No help message set for %r" % self)
178
179
 
 
180
    def options(self):
 
181
        """Return dict of valid options for this command.
 
182
 
 
183
        Maps from long option name to option object."""
 
184
        r = dict()
 
185
        for o in self.takes_options:
 
186
            if not isinstance(o, Option):
 
187
                o = Option.OPTIONS[o]
 
188
            r[o.name] = o
 
189
        return r
179
190
 
180
191
    def run_argv(self, argv):
181
192
        """Parse command line and run."""
186
197
            help_on_command(self.name())
187
198
            return 0
188
199
 
189
 
        # check options are reasonable
190
 
        allowed = self.takes_options
 
200
        allowed_names = self.options().keys()
191
201
        for oname in opts:
192
 
            if oname not in allowed:
 
202
            if oname not in allowed_names:
193
203
                raise BzrCommandError("option '--%s' is not allowed for command %r"
194
204
                                      % (oname, self.name()))
195
205