~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-08-12 15:41:44 UTC
  • Revision ID: mbp@sourcefrog.net-20050812154144-bc98570a78b8f633
- merge in deferred revfile work

Show diffs side-by-side

added added

removed removed

Lines of Context:
1455
1455
 
1456
1456
 
1457
1457
class cmd_merge(Command):
1458
 
    """Perform a three-way merge.
1459
 
    
1460
 
    The branch is the branch you will merge from.  By default, it will merge
1461
 
    the latest revision.  If you specify a revision, that revision will be
1462
 
    merged.  If you specify two revisions, the first will be used as a BASE, 
1463
 
    and the second one as OTHER.  Revision numbers are always relative to the
1464
 
    specified branch.
1465
 
    
1466
 
    Examples:
1467
 
 
1468
 
    To merge the latest revision from bzr.dev
1469
 
    bzr merge ../bzr.dev
1470
 
 
1471
 
    To merge changes up to and including revision 82 from bzr.dev
1472
 
    bzr merge -r 82 ../bzr.dev
1473
 
 
1474
 
    To merge the changes introduced by 82, without previous changes:
1475
 
    bzr merge -r 81..82 ../bzr.dev
1476
 
    
 
1458
    """Perform a three-way merge of trees.
 
1459
    
 
1460
    The SPEC parameters are working tree or revision specifiers.  Working trees
 
1461
    are specified using standard paths or urls.  No component of a directory
 
1462
    path may begin with '@'.
 
1463
    
 
1464
    Working tree examples: '.', '..', 'foo@', but NOT 'foo/@bar'
 
1465
 
 
1466
    Revisions are specified using a dirname/@revno pair, where dirname is the
 
1467
    branch directory and revno is the revision within that branch.  If no revno
 
1468
    is specified, the latest revision is used.
 
1469
 
 
1470
    Revision examples: './@127', 'foo/@', '../@1'
 
1471
 
 
1472
    The OTHER_SPEC parameter is required.  If the BASE_SPEC parameter is
 
1473
    not supplied, the common ancestor of OTHER_SPEC the current branch is used
 
1474
    as the BASE.
 
1475
 
1477
1476
    merge refuses to run if there are any uncommitted changes, unless
1478
1477
    --force is given.
1479
1478
    """
1480
 
    takes_args = ['branch?']
1481
 
    takes_options = ['revision', 'force', 'merge-type']
 
1479
    takes_args = ['other_spec', 'base_spec?']
 
1480
    takes_options = ['force', 'merge-type']
1482
1481
 
1483
 
    def run(self, branch='.', revision=None, force=False, 
1484
 
            merge_type=None):
 
1482
    def run(self, other_spec, base_spec=None, force=False, merge_type=None):
1485
1483
        from bzrlib.merge import merge
1486
1484
        from bzrlib.merge_core import ApplyMerge3
1487
1485
        if merge_type is None:
1488
1486
            merge_type = ApplyMerge3
1489
 
 
1490
 
        if revision is None or len(revision) < 1:
1491
 
            base = (None, None)
1492
 
            other = (branch, -1)
1493
 
        else:
1494
 
            if len(revision) == 1:
1495
 
                other = (branch, revision[0])
1496
 
                base = (None, None)
1497
 
            else:
1498
 
                assert len(revision) == 2
1499
 
                if None in revision:
1500
 
                    raise BzrCommandError(
1501
 
                        "Merge doesn't permit that revision specifier.")
1502
 
                base = (branch, revision[0])
1503
 
                other = (branch, revision[1])
1504
 
            
1505
 
        merge(other, base, check_clean=(not force), merge_type=merge_type)
 
1487
        merge(parse_spec(other_spec), parse_spec(base_spec),
 
1488
              check_clean=(not force), merge_type=merge_type)
1506
1489
 
1507
1490
 
1508
1491
class cmd_revert(Command):