/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-08-01 20:39:06 UTC
  • Revision ID: mbp@sourcefrog.net-20050801203906-b157b3a31de0804b
- more log output from tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
 
# TODO: Split the command framework away from the actual commands.
19
 
 
20
 
# TODO: probably should say which arguments are candidates for glob
21
 
# expansion on windows and do that at the command level.
22
 
 
23
 
import sys
24
 
import os
 
18
 
 
19
import sys, os
25
20
 
26
21
import bzrlib
27
22
from bzrlib.trace import mutter, note, log_error, warning
127
122
    return revs
128
123
 
129
124
 
130
 
def get_merge_type(typestring):
131
 
    """Attempt to find the merge class/factory associated with a string."""
132
 
    from merge import merge_types
133
 
    try:
134
 
        return merge_types[typestring][0]
135
 
    except KeyError:
136
 
        templ = '%s%%7s: %%s' % (' '*12)
137
 
        lines = [templ % (f[0], f[1][1]) for f in merge_types.iteritems()]
138
 
        type_list = '\n'.join(lines)
139
 
        msg = "No known merge type %s. Supported types are:\n%s" %\
140
 
            (typestring, type_list)
141
 
        raise BzrCommandError(msg)
142
 
    
143
 
 
144
125
 
145
126
def _get_cmd_dict(plugins_override=True):
146
127
    d = {}
510
491
    def run(self, source_list, dest):
511
492
        b = find_branch('.')
512
493
 
513
 
        # TODO: glob expansion on windows?
514
494
        b.move([b.relpath(s) for s in source_list], b.relpath(dest))
515
495
 
516
496
 
536
516
 
537
517
 
538
518
 
539
 
class cmd_mv(Command):
540
 
    """Move or rename a file.
541
 
 
542
 
    usage:
543
 
        bzr mv OLDNAME NEWNAME
544
 
        bzr mv SOURCE... DESTINATION
545
 
 
546
 
    If the last argument is a versioned directory, all the other names
547
 
    are moved into it.  Otherwise, there must be exactly two arguments
548
 
    and the file is changed to a new name, which must not already exist.
549
 
 
550
 
    Files cannot be moved between branches.
551
 
    """
552
 
    takes_args = ['names*']
553
 
    def run(self, names_list):
554
 
        if len(names_list) < 2:
555
 
            raise BzrCommandError("missing file argument")
556
 
        b = find_branch(names_list[0])
557
 
 
558
 
        rel_names = [b.relpath(x) for x in names_list]
559
 
        
560
 
        if os.path.isdir(names_list[-1]):
561
 
            # move into existing directory
562
 
            b.move(rel_names[:-1], rel_names[-1])
563
 
        else:
564
 
            if len(names_list) != 2:
565
 
                raise BzrCommandError('to mv multiple files the destination '
566
 
                                      'must be a versioned directory')
567
 
            b.move(rel_names[0], rel_names[1])
568
 
            
569
 
    
570
519
 
571
520
 
572
521
class cmd_pull(Command):
639
588
    """
640
589
    takes_args = ['from_location', 'to_location?']
641
590
    takes_options = ['revision']
642
 
    aliases = ['get', 'clone']
643
591
 
644
592
    def run(self, from_location, to_location=None, revision=None):
645
593
        import errno
646
594
        from bzrlib.merge import merge
647
 
        from bzrlib.branch import DivergedBranches, \
 
595
        from bzrlib.branch import DivergedBranches, NoSuchRevision, \
648
596
             find_cached_branch, Branch
649
597
        from shutil import rmtree
650
598
        from meta_store import CachedStore
691
639
                    revno, rev_id = br_from.get_revision_info(revision[0])
692
640
                try:
693
641
                    br_to.update_revisions(br_from, stop_revision=revno)
694
 
                except bzrlib.errors.NoSuchRevision:
 
642
                except NoSuchRevision:
695
643
                    rmtree(to_location)
696
644
                    msg = "The branch %s has no revision %d." % (from_location,
697
645
                                                                 revno)
1455
1403
    --force is given.
1456
1404
    """
1457
1405
    takes_args = ['other_spec', 'base_spec?']
1458
 
    takes_options = ['force', 'merge-type']
 
1406
    takes_options = ['force']
1459
1407
 
1460
 
    def run(self, other_spec, base_spec=None, force=False, merge_type=None):
 
1408
    def run(self, other_spec, base_spec=None, force=False):
1461
1409
        from bzrlib.merge import merge
1462
 
        from bzrlib.merge_core import ApplyMerge3
1463
 
        if merge_type is None:
1464
 
            merge_type = ApplyMerge3
1465
1410
        merge(parse_spec(other_spec), parse_spec(base_spec),
1466
 
              check_clean=(not force), merge_type=merge_type)
 
1411
              check_clean=(not force))
 
1412
 
1467
1413
 
1468
1414
 
1469
1415
class cmd_revert(Command):
 
1416
    """Restore selected files from a previous revision.
 
1417
    """
 
1418
    takes_args = ['file+']
 
1419
    def run(self, file_list):
 
1420
        from bzrlib.branch import find_branch
 
1421
        
 
1422
        if not file_list:
 
1423
            file_list = ['.']
 
1424
            
 
1425
        b = find_branch(file_list[0])
 
1426
 
 
1427
        b.revert([b.relpath(f) for f in file_list])
 
1428
 
 
1429
 
 
1430
class cmd_merge_revert(Command):
1470
1431
    """Reverse all changes since the last commit.
1471
1432
 
1472
 
    Only versioned files are affected.  Specify filenames to revert only 
1473
 
    those files.  By default, any files that are changed will be backed up
1474
 
    first.  Backup files have a '~' appended to their name.
 
1433
    Only versioned files are affected.
 
1434
 
 
1435
    TODO: Store backups of any files that will be reverted, so
 
1436
          that the revert can be undone.          
1475
1437
    """
1476
 
    takes_options = ['revision', 'no-backup']
1477
 
    takes_args = ['file*']
1478
 
    aliases = ['merge-revert']
 
1438
    takes_options = ['revision']
1479
1439
 
1480
 
    def run(self, revision=None, no_backup=False, file_list=None):
 
1440
    def run(self, revision=None):
1481
1441
        from bzrlib.merge import merge
1482
 
        if file_list is not None:
1483
 
            if len(file_list) == 0:
1484
 
                raise BzrCommandError("No files specified")
1485
1442
        if revision is None:
1486
1443
            revision = [-1]
1487
1444
        elif len(revision) != 1:
1488
 
            raise BzrCommandError('bzr revert --revision takes exactly 1 argument')
 
1445
            raise BzrCommandError('bzr merge-revert --revision takes exactly 1 argument')
1489
1446
        merge(('.', revision[0]), parse_spec('.'),
1490
1447
              check_clean=False,
1491
 
              ignore_zero=True,
1492
 
              backup_files=not no_backup,
1493
 
              file_list=file_list)
 
1448
              ignore_zero=True)
1494
1449
 
1495
1450
 
1496
1451
class cmd_assert_fail(Command):
1555
1510
    'update':                 None,
1556
1511
    'long':                   None,
1557
1512
    'root':                   str,
1558
 
    'no-backup':              None,
1559
 
    'merge-type':             get_merge_type,
1560
1513
    }
1561
1514
 
1562
1515
SHORT_OPTIONS = {
1824
1777
 
1825
1778
def _report_exception(summary, quiet=False):
1826
1779
    import traceback
1827
 
    
1828
1780
    log_error('bzr: ' + summary)
1829
1781
    bzrlib.trace.log_exception()
1830
1782
 
1831
 
    if os.environ.get('BZR_DEBUG'):
1832
 
        traceback.print_exc()
1833
 
 
1834
1783
    if not quiet:
1835
 
        sys.stderr.write('\n')
1836
1784
        tb = sys.exc_info()[2]
1837
1785
        exinfo = traceback.extract_tb(tb)
1838
1786
        if exinfo: