~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-07-13 00:30:30 UTC
  • Revision ID: mbp@sourcefrog.net-20050713003030-2e89871a9ce24c7b
- typo in testsweet

Show diffs side-by-side

added added

removed removed

Lines of Context:
200
200
        assert isinstance(arguments, dict)
201
201
        cmdargs = options.copy()
202
202
        cmdargs.update(arguments)
203
 
        if self.__doc__ == Command.__doc__:
204
 
            from warnings import warn
205
 
            warn("No help message set for %r" % self)
 
203
        assert self.__doc__ != Command.__doc__, \
 
204
               ("No help message set for %r" % self)
206
205
        self.status = self.run(**cmdargs)
207
 
        if self.status is None:
208
 
            self.status = 0
209
206
 
210
207
    
211
208
    def run(self):
412
409
    whether already versioned or not, are searched for files or
413
410
    subdirectories that are neither versioned or ignored, and these
414
411
    are added.  This search proceeds recursively into versioned
415
 
    directories.  If no names are given '.' is assumed.
 
412
    directories.
416
413
 
417
 
    Therefore simply saying 'bzr add' will version all files that
 
414
    Therefore simply saying 'bzr add .' will version all files that
418
415
    are currently unknown.
419
416
 
420
417
    TODO: Perhaps adding a file whose directly is not versioned should
421
418
    recursively add that parent, rather than giving an error?
422
419
    """
423
 
    takes_args = ['file*']
 
420
    takes_args = ['file+']
424
421
    takes_options = ['verbose', 'no-recurse']
425
422
    
426
423
    def run(self, file_list, verbose=False, no_recurse=False):
597
594
        import tempfile
598
595
        cache_root = tempfile.mkdtemp()
599
596
 
600
 
        if revision is None:
 
597
        if revision is not None:
 
598
            if len(revision) > 1:
 
599
                raise BzrCommandError('bzr branch --revision takes exactly 1 revision value')
 
600
        else:
601
601
            revision = [None]
602
 
        elif len(revision) > 1:
603
 
            raise BzrCommandError('bzr branch --revision takes exactly 1 revision value')
604
 
 
605
602
        try:
606
603
            try:
607
604
                br_from = find_cached_branch(from_location, cache_root)
631
628
            br_to.set_root_id(br_from.get_root_id())
632
629
 
633
630
            if revision:
634
 
                if revision[0] is None:
635
 
                    revno = br_from.revno()
636
 
                else:
637
 
                    revno, rev_id = br_from.get_revision_info(revision[0])
 
631
                revno = br_to.lookup_revision(revision[0])
638
632
                try:
639
633
                    br_to.update_revisions(br_from, stop_revision=revno)
640
634
                except NoSuchRevision:
1257
1251
 
1258
1252
 
1259
1253
 
1260
 
class cmd_scan_cache(Command):
1261
 
    hidden = True
1262
 
    def run(self):
1263
 
        from bzrlib.hashcache import HashCache
1264
 
        import os
1265
 
 
1266
 
        c = HashCache('.')
1267
 
        c.read()
1268
 
        c.scan()
1269
 
            
1270
 
        print '%6d stats' % c.stat_count
1271
 
        print '%6d in hashcache' % len(c._cache)
1272
 
        print '%6d files removed from cache' % c.removed_count
1273
 
        print '%6d hashes updated' % c.update_count
1274
 
        print '%6d files changed too recently to cache' % c.danger_count
1275
 
 
1276
 
        if c.needs_write:
1277
 
            c.write()
1278
 
            
1279
 
 
1280
 
 
1281
1254
class cmd_upgrade(Command):
1282
1255
    """Upgrade branch storage to current format.
1283
1256
 
1306
1279
class cmd_selftest(Command):
1307
1280
    """Run internal test suite"""
1308
1281
    hidden = True
1309
 
    takes_options = ['verbose']
1310
 
    def run(self, verbose=False):
 
1282
    def run(self):
1311
1283
        from bzrlib.selftest import selftest
1312
 
        return int(not selftest(verbose=verbose))
 
1284
        return int(not selftest())
1313
1285
 
1314
1286
 
1315
1287
class cmd_version(Command):
1430
1402
    def run(self, revision=None):
1431
1403
        from bzrlib.merge import merge
1432
1404
        if revision is None:
1433
 
            revision = [-1]
 
1405
            revision = -1
1434
1406
        elif len(revision) != 1:
1435
1407
            raise BzrCommandError('bzr merge-revert --revision takes exactly 1 argument')
1436
1408
        merge(('.', revision[0]), parse_spec('.'),
1675
1647
                    This is also a non-master option.
1676
1648
        --help      Run help and exit, also a non-master option (I think that should stay, though)
1677
1649
 
1678
 
    >>> argv, opts = _parse_master_args(['--test'])
 
1650
    >>> argv, opts = _parse_master_args(['bzr', '--test'])
1679
1651
    Traceback (most recent call last):
1680
1652
    ...
1681
1653
    BzrCommandError: Invalid master option: 'test'
1682
 
    >>> argv, opts = _parse_master_args(['--version', 'command'])
 
1654
    >>> argv, opts = _parse_master_args(['bzr', '--version', 'command'])
1683
1655
    >>> print argv
1684
1656
    ['command']
1685
1657
    >>> print opts['version']
1686
1658
    True
1687
 
    >>> argv, opts = _parse_master_args(['--profile', 'command', '--more-options'])
 
1659
    >>> argv, opts = _parse_master_args(['bzr', '--profile', 'command', '--more-options'])
1688
1660
    >>> print argv
1689
1661
    ['command', '--more-options']
1690
1662
    >>> print opts['profile']
1691
1663
    True
1692
 
    >>> argv, opts = _parse_master_args(['--no-plugins', 'command'])
 
1664
    >>> argv, opts = _parse_master_args(['bzr', '--no-plugins', 'command'])
1693
1665
    >>> print argv
1694
1666
    ['command']
1695
1667
    >>> print opts['no-plugins']
1696
1668
    True
1697
1669
    >>> print opts['profile']
1698
1670
    False
1699
 
    >>> argv, opts = _parse_master_args(['command', '--profile'])
 
1671
    >>> argv, opts = _parse_master_args(['bzr', 'command', '--profile'])
1700
1672
    >>> print argv
1701
1673
    ['command', '--profile']
1702
1674
    >>> print opts['profile']
1709
1681
        'help':False
1710
1682
    }
1711
1683
 
 
1684
    # This is the point where we could hook into argv[0] to determine
 
1685
    # what front-end is supposed to be run
 
1686
    # For now, we are just ignoring it.
 
1687
    cmd_name = argv.pop(0)
1712
1688
    for arg in argv[:]:
1713
1689
        if arg[:2] != '--': # at the first non-option, we return the rest
1714
1690
            break
1728
1704
 
1729
1705
    This is similar to main(), but without all the trappings for
1730
1706
    logging and error handling.  
1731
 
    
1732
 
    argv
1733
 
       The command-line arguments, without the program name.
1734
 
    
1735
 
    Returns a command status or raises an exception.
1736
1707
    """
1737
1708
    argv = [a.decode(bzrlib.user_encoding) for a in argv]
1738
 
 
1739
 
    # some options like --builtin and --no-plugins have special effects
1740
 
    argv, master_opts = _parse_master_args(argv)
1741
 
    if not master_opts['no-plugins']:
1742
 
        from bzrlib.plugin import load_plugins
1743
 
        load_plugins()
1744
 
 
1745
 
    args, opts = parse_args(argv)
1746
 
 
1747
 
    if master_opts.get('help') or 'help' in opts:
1748
 
        from bzrlib.help import help
1749
 
        if argv:
1750
 
            help(argv[0])
1751
 
        else:
1752
 
            help()
1753
 
        return 0            
1754
 
        
1755
 
    if 'version' in opts:
1756
 
        show_version()
1757
 
        return 0
1758
 
    
1759
 
    if args and args[0] == 'builtin':
1760
 
        include_plugins=False
1761
 
        args = args[1:]
1762
1709
    
1763
1710
    try:
 
1711
        # some options like --builtin and --no-plugins have special effects
 
1712
        argv, master_opts = _parse_master_args(argv)
 
1713
        if not master_opts['no-plugins']:
 
1714
            from bzrlib.plugin import load_plugins
 
1715
            load_plugins()
 
1716
 
 
1717
        args, opts = parse_args(argv)
 
1718
 
 
1719
        if master_opts['help']:
 
1720
            from bzrlib.help import help
 
1721
            if argv:
 
1722
                help(argv[0])
 
1723
            else:
 
1724
                help()
 
1725
            return 0            
 
1726
            
 
1727
        if 'help' in opts:
 
1728
            from bzrlib.help import help
 
1729
            if args:
 
1730
                help(args[0])
 
1731
            else:
 
1732
                help()
 
1733
            return 0
 
1734
        elif 'version' in opts:
 
1735
            show_version()
 
1736
            return 0
 
1737
        elif args and args[0] == 'builtin':
 
1738
            include_plugins=False
 
1739
            args = args[1:]
1764
1740
        cmd = str(args.pop(0))
1765
1741
    except IndexError:
1766
 
        print >>sys.stderr, "please try 'bzr help' for help"
 
1742
        import help
 
1743
        help.help()
1767
1744
        return 1
 
1745
          
1768
1746
 
1769
1747
    plugins_override = not (master_opts['builtin'])
1770
1748
    canonical_cmd, cmd_class = get_cmd_class(cmd, plugins_override=plugins_override)
1835
1813
    try:
1836
1814
        try:
1837
1815
            try:
1838
 
                return run_bzr(argv[1:])
 
1816
                return run_bzr(argv)
1839
1817
            finally:
1840
1818
                # do this here inside the exception wrappers to catch EPIPE
1841
1819
                sys.stdout.flush()