~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: John Arbash Meinel
  • Date: 2006-10-16 01:25:46 UTC
  • mfrom: (2071 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2080.
  • Revision ID: john@arbash-meinel.com-20061016012546-d01a0740671b4d73
[merge] bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
# TODO: "--profile=cum", to change sort order.  Is there any value in leaving
29
29
# the profile output behind so it can be interactively examined?
30
30
 
 
31
import os
 
32
import sys
 
33
 
 
34
from bzrlib.lazy_import import lazy_import
 
35
lazy_import(globals(), """
31
36
import codecs
32
37
import errno
33
 
import os
34
38
from warnings import warn
35
 
import sys
36
39
 
37
40
import bzrlib
38
 
import bzrlib.errors as errors
39
 
from bzrlib.errors import (BzrError,
40
 
                           BzrCommandError,
41
 
                           BzrCheckError,
42
 
                           NotBranchError)
43
 
from bzrlib import option
 
41
from bzrlib import (
 
42
    errors,
 
43
    option,
 
44
    osutils,
 
45
    trace,
 
46
    )
 
47
""")
 
48
 
 
49
from bzrlib.symbol_versioning import (
 
50
    deprecated_function,
 
51
    deprecated_method,
 
52
    zero_eight,
 
53
    zero_eleven,
 
54
    )
 
55
# Compatibility
44
56
from bzrlib.option import Option
45
 
import bzrlib.osutils
46
 
from bzrlib.symbol_versioning import (deprecated_method, zero_eight)
47
 
import bzrlib.trace
48
 
from bzrlib.trace import mutter, note, log_error, warning, be_quiet
 
57
 
49
58
 
50
59
plugin_cmds = {}
51
60
 
66
75
        k_unsquished = k
67
76
    if k_unsquished not in plugin_cmds:
68
77
        plugin_cmds[k_unsquished] = cmd
69
 
        mutter('registered plugin command %s', k_unsquished)
 
78
        trace.mutter('registered plugin command %s', k_unsquished)
70
79
        if decorate and k_unsquished in builtin_command_names():
71
80
            return _builtin_commands()[k_unsquished]
72
81
    elif decorate:
74
83
        plugin_cmds[k_unsquished] = cmd
75
84
        return result
76
85
    else:
77
 
        log_error('Two plugins defined the same command: %r' % k)
78
 
        log_error('Not loading the one in %r' % sys.modules[cmd.__module__])
 
86
        trace.log_error('Two plugins defined the same command: %r' % k)
 
87
        trace.log_error('Not loading the one in %r' % sys.modules[cmd.__module__])
79
88
 
80
89
 
81
90
def _squish_command_name(cmd):
150
159
    if cmd_obj:
151
160
        return cmd_obj
152
161
 
153
 
    raise BzrCommandError('unknown command "%s"' % cmd_name)
 
162
    raise errors.BzrCommandError('unknown command "%s"' % cmd_name)
154
163
 
155
164
 
156
165
class Command(object):
222
231
 
223
232
        Maps from long option name to option object."""
224
233
        r = dict()
225
 
        r['help'] = Option.OPTIONS['help']
 
234
        r['help'] = option.Option.OPTIONS['help']
226
235
        for o in self.takes_options:
227
236
            if isinstance(o, basestring):
228
 
                o = Option.OPTIONS[o]
 
237
                o = option.Option.OPTIONS[o]
229
238
            r[o.name] = o
230
239
        return r
231
240
 
239
248
            self.outf = sys.stdout
240
249
            return
241
250
 
242
 
        output_encoding = bzrlib.osutils.get_terminal_encoding()
 
251
        output_encoding = osutils.get_terminal_encoding()
243
252
 
244
253
        # use 'replace' so that we don't abort if trying to write out
245
254
        # in e.g. the default C locale.
316
325
            return None
317
326
 
318
327
 
 
328
# Technically, this function hasn't been use in a *really* long time
 
329
# but we are only deprecating it now.
 
330
@deprecated_function(zero_eleven)
319
331
def parse_spec(spec):
320
332
    """
321
333
    >>> parse_spec(None)
385
397
                argdict[argname + '_list'] = None
386
398
        elif ap[-1] == '+':
387
399
            if not args:
388
 
                raise BzrCommandError("command %r needs one or more %s"
389
 
                        % (cmd, argname.upper()))
 
400
                raise errors.BzrCommandError("command %r needs one or more %s"
 
401
                                             % (cmd, argname.upper()))
390
402
            else:
391
403
                argdict[argname + '_list'] = args[:]
392
404
                args = []
393
405
        elif ap[-1] == '$': # all but one
394
406
            if len(args) < 2:
395
 
                raise BzrCommandError("command %r needs one or more %s"
396
 
                        % (cmd, argname.upper()))
 
407
                raise errors.BzrCommandError("command %r needs one or more %s"
 
408
                                             % (cmd, argname.upper()))
397
409
            argdict[argname + '_list'] = args[:-1]
398
410
            args[:-1] = []
399
411
        else:
400
412
            # just a plain arg
401
413
            argname = ap
402
414
            if not args:
403
 
                raise BzrCommandError("command %r requires argument %s"
404
 
                        % (cmd, argname.upper()))
 
415
                raise errors.BzrCommandError("command %r requires argument %s"
 
416
                               % (cmd, argname.upper()))
405
417
            else:
406
418
                argdict[argname] = args.pop(0)
407
419
            
408
420
    if args:
409
 
        raise BzrCommandError("extra argument to command %s: %s"
410
 
                              % (cmd, args[0]))
 
421
        raise errors.BzrCommandError("extra argument to command %s: %s"
 
422
                                     % (cmd, args[0]))
411
423
 
412
424
    return argdict
413
425
 
520
532
        elif a == '--builtin':
521
533
            opt_builtin = True
522
534
        elif a in ('--quiet', '-q'):
523
 
            be_quiet()
 
535
            trace.be_quiet()
524
536
        else:
525
537
            argv_copy.append(a)
526
538
        i += 1
574
586
        return ret or 0
575
587
    finally:
576
588
        # reset, in case we may do other commands later within the same process
577
 
        be_quiet(False)
 
589
        trace.be_quiet(False)
578
590
 
579
591
def display_command(func):
580
592
    """Decorator that suppresses pipe/interrupt errors."""
602
614
    bzrlib.ui.ui_factory = TextUIFactory()
603
615
    argv = [a.decode(bzrlib.user_encoding) for a in argv[1:]]
604
616
    ret = run_bzr_catch_errors(argv)
605
 
    mutter("return code %d", ret)
 
617
    trace.mutter("return code %d", ret)
606
618
    return ret
607
619
 
608
620
 
614
626
    except (KeyboardInterrupt, Exception), e:
615
627
        # used to handle AssertionError and KeyboardInterrupt
616
628
        # specially here, but hopefully they're handled ok by the logger now
617
 
        bzrlib.trace.report_exception(sys.exc_info(), sys.stderr)
 
629
        trace.report_exception(sys.exc_info(), sys.stderr)
618
630
        if os.environ.get('BZR_PDB'):
619
631
            print '**** entering debugger'
620
632
            import pdb