~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-05-26 16:58:09 UTC
  • Revision ID: mbp@sourcefrog.net-20050526165809-70901dd62ebe9b91
- New form 'bzr log -r FROM:TO' 
  patch from John A Meinel

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
    assert cmd.startswith("cmd_")
38
38
    return cmd[4:].replace('_','-')
39
39
 
 
40
def _parse_revision_str(revstr):
 
41
    """This handles a revision string -> revno. 
 
42
 
 
43
    There are several possibilities:
 
44
 
 
45
        '234'       -> 234
 
46
        '234:345'   -> [234, 345]
 
47
        ':234'      -> [None, 234]
 
48
        '234:'      -> [234, None]
 
49
 
 
50
    In the future we will also support:
 
51
        'uuid:blah-blah-blah'   -> ?
 
52
        'hash:blahblahblah'     -> ?
 
53
        potentially:
 
54
        'tag:mytag'             -> ?
 
55
    """
 
56
    if revstr.find(':') != -1:
 
57
        revs = revstr.split(':')
 
58
        if len(revs) > 2:
 
59
            raise ValueError('More than 2 pieces not supported for --revision: %r' % revstr)
 
60
 
 
61
        if not revs[0]:
 
62
            revs[0] = None
 
63
        else:
 
64
            revs[0] = int(revs[0])
 
65
 
 
66
        if not revs[1]:
 
67
            revs[1] = None
 
68
        else:
 
69
            revs[1] = int(revs[1])
 
70
    else:
 
71
        revs = int(revstr)
 
72
    return revs
 
73
 
40
74
def get_all_cmds():
41
75
    """Return canonical name and class for all registered commands."""
42
76
    for k, v in globals().iteritems():
594
628
class cmd_log(Command):
595
629
    """Show log of this branch.
596
630
 
597
 
    TODO: Option to limit range.
 
631
    To request a range of logs, you can use the command -r begin:end
 
632
    -r revision requests a specific revision, -r :end or -r begin: are
 
633
    also valid.
 
634
 
 
635
    TODO: Make --revision support uuid: and hash: [future tag:] notation.
 
636
  
598
637
    """
599
638
 
600
639
    takes_args = ['filename?']
601
 
    takes_options = ['forward', 'timezone', 'verbose', 'show-ids']
 
640
    takes_options = ['forward', 'timezone', 'verbose', 'show-ids', 'revision']
602
641
    
603
642
    def run(self, filename=None, timezone='original',
604
643
            verbose=False,
605
644
            show_ids=False,
606
 
            forward=False):
 
645
            forward=False,
 
646
            revision=None):
607
647
        from bzrlib import show_log, find_branch
608
648
        import codecs
609
649
 
620
660
            b = find_branch('.', lock_mode='r')
621
661
            file_id = None
622
662
 
 
663
        if revision == None:
 
664
            revision = [None, None]
 
665
        elif isinstance(revision, int):
 
666
            revision = [revision, revision]
 
667
        else:
 
668
            # pair of revisions?
 
669
            pass
 
670
            
 
671
        assert len(revision) == 2
 
672
 
623
673
        mutter('encoding log as %r' % bzrlib.user_encoding)
624
674
        outf = codecs.getwriter(bzrlib.user_encoding)(sys.stdout)
625
675
 
628
678
                 verbose=verbose,
629
679
                 show_ids=show_ids,
630
680
                 to_file=outf,
631
 
                 direction=direction)
 
681
                 direction=direction,
 
682
                 start_revision=revision[0],
 
683
                 end_revision=revision[1])
632
684
 
633
685
 
634
686
 
982
1034
    'forward':                None,
983
1035
    'message':                unicode,
984
1036
    'profile':                None,
985
 
    'revision':               int,
 
1037
    'revision':               _parse_revision_str,
986
1038
    'show-ids':               None,
987
1039
    'timezone':               str,
988
1040
    'verbose':                None,