~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

Merge from bzr.ab

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
import errno
35
35
 
36
36
import bzrlib
 
37
from bzrlib.config import GlobalConfig
37
38
import bzrlib.trace
38
39
from bzrlib.trace import mutter, note, log_error, warning, be_quiet
39
40
from bzrlib.errors import (BzrError, 
40
41
                           BzrCheckError,
41
42
                           BzrCommandError,
42
43
                           BzrOptionError,
43
 
                           NotBranchError)
 
44
                           NotBranchError,
 
45
                           CommandDefaultSyntax,
 
46
                           )
44
47
from bzrlib.revisionspec import RevisionSpec
45
48
from bzrlib import BZRDIR
46
49
from bzrlib.option import Option
168
171
        List of argument forms, marked with whether they are optional,
169
172
        repeated, etc.
170
173
 
171
 
                Examples:
172
 
 
173
 
                ['to_location', 'from_branch?', 'file*']
174
 
 
175
 
                'to_location' is required
176
 
                'from_branch' is optional
177
 
                'file' can be specified 0 or more times
 
174
                Examples:
 
175
 
 
176
                ['to_location', 'from_branch?', 'file*']
 
177
 
 
178
                'to_location' is required
 
179
                'from_branch' is optional
 
180
                'file' can be specified 0 or more times
178
181
 
179
182
    takes_options
180
183
        List of options that may be given for this command.  These can
208
211
            r[o.name] = o
209
212
        return r
210
213
 
211
 
    def run_argv(self, argv):
 
214
    def run_argv(self, argv, defaults=None):
212
215
        """Parse command line and run."""
213
 
        args, opts = parse_args(self, argv)
 
216
        if defaults is not None:
 
217
            args, opts = parse_args(self, defaults)
 
218
        else:
 
219
            args = []
 
220
            opts = {}
 
221
        cmd_args, cmd_opts = parse_args(self, argv)
 
222
        args.extend(cmd_args)
 
223
        opts.update(cmd_opts)
214
224
        if 'help' in opts:  # e.g. bzr add --help
215
225
            from bzrlib.help import help_on_command
216
226
            help_on_command(self.name())
484
494
    argv = [a.decode(bzrlib.user_encoding) for a in argv]
485
495
 
486
496
    opt_lsprof = opt_profile = opt_no_plugins = opt_builtin = False
 
497
    opt_no_defaults = False
487
498
 
488
499
    # --no-plugins is handled specially at a very early stage. We need
489
500
    # to load plugins before doing other command parsing so that they
490
501
    # can override commands, but this needs to happen first.
491
502
 
492
 
    for a in argv:
 
503
    for a in argv[:]:
493
504
        if a == '--profile':
494
505
            opt_profile = True
495
506
        elif a == '--lsprof':
500
511
            opt_builtin = True
501
512
        elif a in ('--quiet', '-q'):
502
513
            be_quiet()
 
514
        elif a in ('--no-defaults',):
 
515
            opt_no_defaults = True
503
516
        else:
504
517
            continue
505
518
        argv.remove(a)
524
537
    cmd = str(argv.pop(0))
525
538
 
526
539
    cmd_obj = get_cmd_object(cmd, plugins_override=not opt_builtin)
527
 
 
 
540
    if opt_no_defaults is True:
 
541
        cmd_defaults = []
 
542
    else:
 
543
        cmd_defaults = GlobalConfig().get_command_defaults(cmd_obj.name())
528
544
    try:
529
545
        if opt_lsprof:
530
 
            ret = apply_lsprofiled(cmd_obj.run_argv, argv)
 
546
            ret = apply_lsprofiled(cmd_obj.run_argv, argv, cmd_defaults)
531
547
        elif opt_profile:
532
 
            ret = apply_profiled(cmd_obj.run_argv, argv)
 
548
            ret = apply_profiled(cmd_obj.run_argv, argv, cmd_defaults)
533
549
        else:
534
 
            ret = cmd_obj.run_argv(argv)
 
550
            ret = cmd_obj.run_argv(argv, cmd_defaults)
535
551
        return ret or 0
536
552
    finally:
537
553
        # reset, in case we may do other commands later within the same process