~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: Robert Collins
  • Date: 2005-10-14 02:17:36 UTC
  • mfrom: (1185.16.34)
  • Revision ID: robertc@lifelesslap.robertcollins.net-20051014021736-7230e59066856096
MergeĀ fromĀ Martin.

Show diffs side-by-side

added added

removed removed

Lines of Context:
390
390
        import errno
391
391
        from shutil import rmtree
392
392
        cache_root = tempfile.mkdtemp()
393
 
        try:
394
 
            if revision is None:
395
 
                revision = [None]
396
 
            elif len(revision) > 1:
397
 
                raise BzrCommandError(
398
 
                    'bzr branch --revision takes exactly 1 revision value')
399
 
            try:
400
 
                br_from = Branch.open(from_location)
401
 
            except OSError, e:
402
 
                if e.errno == errno.ENOENT:
403
 
                    raise BzrCommandError('Source location "%s" does not'
404
 
                                          ' exist.' % to_location)
405
 
                else:
406
 
                    raise
 
393
        if revision is None:
 
394
            revision = [None]
 
395
        elif len(revision) > 1:
 
396
            raise BzrCommandError(
 
397
                'bzr branch --revision takes exactly 1 revision value')
 
398
        try:
 
399
            br_from = Branch.open(from_location)
 
400
        except OSError, e:
 
401
            if e.errno == errno.ENOENT:
 
402
                raise BzrCommandError('Source location "%s" does not'
 
403
                                      ' exist.' % to_location)
 
404
            else:
 
405
                raise
 
406
        br_from.lock_read()
 
407
        try:
407
408
            br_from.setup_caching(cache_root)
408
409
            if basis is not None:
409
410
                basis_branch = Branch.open_containing(basis)
435
436
            except bzrlib.errors.UnlistableBranch:
436
437
                msg = "The branch %s cannot be used as a --basis"
437
438
        finally:
 
439
            br_from.unlock()
438
440
            rmtree(cache_root)
439
441
 
440
442
 
1419
1421
                print '\t', d.split('\n')[0]
1420
1422
 
1421
1423
 
 
1424
class cmd_testament(Command):
 
1425
    """Show testament (signing-form) of a revision."""
 
1426
    takes_options = ['revision', 'long']
 
1427
    takes_args = ['branch?']
 
1428
    def run(self, branch='.', revision=None, long=False):
 
1429
        from bzrlib.testament import Testament
 
1430
        b = Branch.open_containing(branch)
 
1431
        b.lock_read()
 
1432
        try:
 
1433
            if revision is None:
 
1434
                rev_id = b.last_revision()
 
1435
            else:
 
1436
                rev_id = revision[0].in_history(b).rev_id
 
1437
            t = Testament.from_revision(b, rev_id)
 
1438
            if long:
 
1439
                sys.stdout.writelines(t.as_text_lines())
 
1440
            else:
 
1441
                sys.stdout.write(t.as_short_text())
 
1442
        finally:
 
1443
            b.unlock()
 
1444
 
 
1445
 
 
1446
class cmd_annotate(Command):
 
1447
    """Show the origin of each line in a file.
 
1448
 
 
1449
    This prints out the given file with an annotation on the 
 
1450
    left side indicating which revision, author and date introduced the 
 
1451
    change.
 
1452
    """
 
1453
    # TODO: annotate directories; showing when each file was last changed
 
1454
    # TODO: annotate a previous version of a file
 
1455
    aliases = ['blame', 'praise']
 
1456
    takes_args = ['filename']
 
1457
 
 
1458
    def run(self, filename):
 
1459
        from bzrlib.annotate import annotate_file
 
1460
        b = Branch.open_containing(filename)
 
1461
        b.lock_read()
 
1462
        try:
 
1463
            rp = b.relpath(filename)
 
1464
            tree = b.revision_tree(b.last_revision())
 
1465
            file_id = tree.inventory.path2id(rp)
 
1466
            file_version = tree.inventory[file_id].revision
 
1467
            annotate_file(b, file_version, file_id, sys.stdout)
 
1468
        finally:
 
1469
            b.unlock()
 
1470
 
 
1471
# these get imported and then picked up by the scan for cmd_*
 
1472
# TODO: Some more consistent way to split command definitions across files;
 
1473
# we do need to load at least some information about them to know of 
 
1474
# aliases.
 
1475
from bzrlib.conflicts import cmd_resolve, cmd_conflicts