~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: Robert Collins
  • Date: 2005-10-17 11:56:54 UTC
  • mfrom: (1185.16.59)
  • Revision ID: robertc@robertcollins.net-20051017115654-662239e1587524a8
mergeĀ fromĀ martin.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
import os
20
20
 
21
21
import bzrlib
22
 
import bzrlib.trace
23
 
from bzrlib.trace import mutter, note, log_error, warning
 
22
from bzrlib import BZRDIR
 
23
from bzrlib.commands import Command
 
24
from bzrlib.branch import Branch
24
25
from bzrlib.errors import BzrError, BzrCheckError, BzrCommandError, NotBranchError
25
26
from bzrlib.errors import DivergedBranches
26
 
from bzrlib.branch import Branch
27
 
from bzrlib import BZRDIR
28
 
from bzrlib.commands import Command
 
27
from bzrlib.option import Option
29
28
from bzrlib.revisionspec import RevisionSpec
 
29
import bzrlib.trace
 
30
from bzrlib.trace import mutter, note, log_error, warning
30
31
from bzrlib.workingtree import WorkingTree
31
32
 
32
33
 
698
699
    To request a range of logs, you can use the command -r begin:end
699
700
    -r revision requests a specific revision, -r :end or -r begin: are
700
701
    also valid.
701
 
 
702
 
    --message allows you to give a regular expression, which will be evaluated
703
 
    so that only matching entries will be displayed.
704
702
    """
705
703
 
706
704
    # TODO: Make --revision support uuid: and hash: [future tag:] notation.
707
705
 
708
706
    takes_args = ['filename?']
709
 
    takes_options = ['forward', 'timezone', 'verbose', 'show-ids', 'revision',
710
 
                     'long', 'message', 'short',]
 
707
    takes_options = [Option('forward', 
 
708
                            help='show from oldest to newest'),
 
709
                     'timezone', 'verbose', 
 
710
                     'show-ids', 'revision',
 
711
                     Option('line', help='format with one line per revision'),
 
712
                     'long', 
 
713
                     Option('message',
 
714
                            help='show revisions whose message matches this regexp',
 
715
                            type=str),
 
716
                     Option('short', help='use moderately short format'),
 
717
                     ]
711
718
    
712
719
    def run(self, filename=None, timezone='original',
713
720
            verbose=False,
716
723
            revision=None,
717
724
            message=None,
718
725
            long=False,
719
 
            short=False):
 
726
            short=False,
 
727
            line=False):
720
728
        from bzrlib.log import log_formatter, show_log
721
729
        import codecs
722
 
 
 
730
        assert message is None or isinstance(message, basestring), \
 
731
            "invalid message argument %r" % message
723
732
        direction = (forward and 'forward') or 'reverse'
724
733
        
725
734
        if filename:
756
765
        # in e.g. the default C locale.
757
766
        outf = codecs.getwriter(bzrlib.user_encoding)(sys.stdout, errors='replace')
758
767
 
759
 
        if not short:
760
 
            log_format = 'long'
761
 
        else:
 
768
        log_format = 'long'
 
769
        if short:
762
770
            log_format = 'short'
 
771
        if line:
 
772
            log_format = 'line'
763
773
        lf = log_formatter(log_format,
764
774
                           show_ids=show_ids,
765
775
                           to_file=outf,
1001
1011
    # XXX: verbose currently does nothing
1002
1012
 
1003
1013
    takes_args = ['selected*']
1004
 
    takes_options = ['message', 'file', 'verbose', 'unchanged']
 
1014
    takes_options = ['message', 'verbose', 
 
1015
                     Option('unchanged',
 
1016
                            help='commit even if nothing has changed'),
 
1017
                     Option('file', type=str, 
 
1018
                            argname='msgfile',
 
1019
                            help='file containing commit message'),
 
1020
                     ]
1005
1021
    aliases = ['ci', 'checkin']
1006
1022
 
1007
1023
    def run(self, message=None, file=None, verbose=True, selected_list=None,
1015
1031
        tree = WorkingTree(b.base, b)
1016
1032
        if selected_list:
1017
1033
            selected_list = [tree.relpath(s) for s in selected_list]
1018
 
            
1019
1034
        if message is None and not file:
1020
1035
            catcher = StringIO()
1021
1036
            show_status(b, specific_files=selected_list,
1125
1140
    fail.
1126
1141
    
1127
1142
    If arguments are given, they are regular expressions that say
1128
 
    which tests should run."""
 
1143
    which tests should run.
 
1144
    """
1129
1145
    # TODO: --list should give a list of all available tests
1130
1146
    hidden = True
1131
1147
    takes_args = ['testspecs*']
1132
 
    takes_options = ['verbose']
1133
 
    def run(self, testspecs_list=None, verbose=False):
 
1148
    takes_options = ['verbose', 
 
1149
                     Option('one', help='stop when one test fails'),
 
1150
                    ]
 
1151
 
 
1152
    def run(self, testspecs_list=None, verbose=False, one=False):
1134
1153
        import bzrlib.ui
1135
1154
        from bzrlib.selftest import selftest
1136
1155
        # we don't want progress meters from the tests to go to the
1145
1164
            else:
1146
1165
                pattern = ".*"
1147
1166
            result = selftest(verbose=verbose, 
1148
 
                              pattern=pattern)
 
1167
                              pattern=pattern,
 
1168
                              stop_on_failure=one)
1149
1169
            if result:
1150
1170
                bzrlib.trace.info('tests passed')
1151
1171
            else:
1455
1475
class cmd_annotate(Command):
1456
1476
    """Show the origin of each line in a file.
1457
1477
 
1458
 
    This prints out the given file with an annotation on the 
1459
 
    left side indicating which revision, author and date introduced the 
1460
 
    change.
 
1478
    This prints out the given file with an annotation on the left side
 
1479
    indicating which revision, author and date introduced the change.
 
1480
 
 
1481
    If the origin is the same for a run of consecutive lines, it is 
 
1482
    shown only at the top, unless the --all option is given.
1461
1483
    """
1462
1484
    # TODO: annotate directories; showing when each file was last changed
1463
1485
    # TODO: annotate a previous version of a file
 
1486
    # TODO: if the working copy is modified, show annotations on that 
 
1487
    #       with new uncommitted lines marked
1464
1488
    aliases = ['blame', 'praise']
1465
1489
    takes_args = ['filename']
 
1490
    takes_options = [Option('all', help='show annotations on all lines'),
 
1491
                     Option('long', help='show date in annotations'),
 
1492
                     ]
1466
1493
 
1467
 
    def run(self, filename):
 
1494
    def run(self, filename, all=False, long=False):
1468
1495
        from bzrlib.annotate import annotate_file
1469
1496
        b = Branch.open_containing(filename)
1470
1497
        b.lock_read()
1474
1501
            tree = b.revision_tree(b.last_revision())
1475
1502
            file_id = tree.inventory.path2id(rp)
1476
1503
            file_version = tree.inventory[file_id].revision
1477
 
            annotate_file(b, file_version, file_id, sys.stdout)
 
1504
            annotate_file(b, file_version, file_id, long, all, sys.stdout)
1478
1505
        finally:
1479
1506
            b.unlock()
1480
1507