~lifeless/bzr/index.range_map

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Robert Collins
  • Date: 2008-06-19 01:17:19 UTC
  • mfrom: (3218.1.277 +trunk)
  • Revision ID: robertc@robertcollins.net-20080619011719-1c4g4uxzzhdls2wf
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
    errors,
44
44
    option,
45
45
    osutils,
 
46
    registry,
46
47
    trace,
47
48
    win32utils,
48
49
    )
94
95
 
95
96
 
96
97
def _unsquish_command_name(cmd):
97
 
    assert cmd.startswith("cmd_")
98
98
    return cmd[4:].replace('_','-')
99
99
 
100
100
 
168
168
    cmd_obj = ExternalCommand.find_command(cmd_name)
169
169
    if cmd_obj:
170
170
        return cmd_obj
 
171
 
 
172
    # look for plugins that provide this command but aren't installed
 
173
    for provider in command_providers_registry:
 
174
        try:
 
175
            plugin_metadata = provider.plugin_for_command(cmd_name)
 
176
        except errors.NoPluginAvailable:
 
177
            pass
 
178
        else:
 
179
            raise errors.CommandAvailableInPlugin(cmd_name, 
 
180
                                                  plugin_metadata, provider)
 
181
 
171
182
    raise KeyError
172
183
 
173
184
 
271
282
            elif aname[-1] == '*':
272
283
                aname = '[' + aname[:-1] + '...]'
273
284
            s += aname + ' '
274
 
                
275
 
        assert s[-1] == ' '
276
 
        s = s[:-1]
 
285
        s = s[:-1]      # remove last space
277
286
        return s
278
287
 
279
288
    def get_help_text(self, additional_see_also=None, plain=True,
389
398
            if line.startswith(':') and line.endswith(':') and len(line) > 2:
390
399
                save_section(sections, label, section)
391
400
                label,section = line[1:-1],''
392
 
            elif label != None and len(line) > 1 and not line[0].isspace():
 
401
            elif (label is not None) and len(line) > 1 and not line[0].isspace():
393
402
                save_section(sections, label, section)
394
403
                label,section = None,line
395
404
            else:
433
442
 
434
443
    def _setup_outf(self):
435
444
        """Return a file linked to stdout, which has proper encoding."""
436
 
        assert self.encoding_type in ['strict', 'exact', 'replace']
437
 
 
438
445
        # Originally I was using self.stdout, but that looks
439
446
        # *way* too much like sys.stdout
440
447
        if self.encoding_type == 'exact':
817
824
    import bzrlib.ui
818
825
    from bzrlib.ui.text import TextUIFactory
819
826
    bzrlib.ui.ui_factory = TextUIFactory()
 
827
     
 
828
    # Is this a final release version? If so, we should suppress warnings
 
829
    if bzrlib.version_info[3] == 'final':
 
830
        from bzrlib import symbol_versioning
 
831
        symbol_versioning.suppress_deprecation_warnings(override=False)
820
832
    try:
821
833
        argv = [a.decode(bzrlib.user_encoding) for a in argv[1:]]
822
834
    except UnicodeDecodeError:
883
895
            return [cmd]
884
896
 
885
897
 
 
898
class Provider(object):
 
899
    '''Generic class to be overriden by plugins'''
 
900
 
 
901
    def plugin_for_command(self, cmd_name):
 
902
        '''Takes a command and returns the information for that plugin
 
903
        
 
904
        :return: A dictionary with all the available information 
 
905
        for the requested plugin
 
906
        '''
 
907
        raise NotImplementedError
 
908
 
 
909
 
 
910
class ProvidersRegistry(registry.Registry):
 
911
    '''This registry exists to allow other providers to exist'''
 
912
 
 
913
    def __iter__(self):
 
914
        for key, provider in self.iteritems():
 
915
            yield provider
 
916
 
 
917
command_providers_registry = ProvidersRegistry()
 
918
 
 
919
 
886
920
if __name__ == '__main__':
887
921
    sys.exit(main(sys.argv))