71
72
    This always returns a list.  The list will have one element for
 
74
 
    It supports integers directly, but everything else it
 
75
 
    defers for passing to RevisionSpec.
 
77
75
    >>> _parse_revision_str('234')
 
 
76
    [<RevisionSpec_int 234>]
 
79
77
    >>> _parse_revision_str('234..567')
 
 
78
    [<RevisionSpec_int 234>, <RevisionSpec_int 567>]
 
81
79
    >>> _parse_revision_str('..')
 
 
80
    [<RevisionSpec None>, <RevisionSpec None>]
 
83
81
    >>> _parse_revision_str('..234')
 
 
82
    [<RevisionSpec None>, <RevisionSpec_int 234>]
 
85
83
    >>> _parse_revision_str('234..')
 
 
84
    [<RevisionSpec_int 234>, <RevisionSpec None>]
 
87
85
    >>> _parse_revision_str('234..456..789') # Maybe this should be an error
 
 
86
    [<RevisionSpec_int 234>, <RevisionSpec_int 456>, <RevisionSpec_int 789>]
 
89
87
    >>> _parse_revision_str('234....789') # Error?
 
 
88
    [<RevisionSpec_int 234>, <RevisionSpec None>, <RevisionSpec_int 789>]
 
91
89
    >>> _parse_revision_str('revid:test@other.com-234234')
 
92
 
    ['revid:test@other.com-234234']
 
 
90
    [<RevisionSpec_revid revid:test@other.com-234234>]
 
93
91
    >>> _parse_revision_str('revid:test@other.com-234234..revid:test@other.com-234235')
 
94
 
    ['revid:test@other.com-234234', 'revid:test@other.com-234235']
 
 
92
    [<RevisionSpec_revid revid:test@other.com-234234>, <RevisionSpec_revid revid:test@other.com-234235>]
 
95
93
    >>> _parse_revision_str('revid:test@other.com-234234..23')
 
96
 
    ['revid:test@other.com-234234', 23]
 
 
94
    [<RevisionSpec_revid revid:test@other.com-234234>, <RevisionSpec_int 23>]
 
97
95
    >>> _parse_revision_str('date:2005-04-12')
 
 
96
    [<RevisionSpec_date date:2005-04-12>]
 
99
97
    >>> _parse_revision_str('date:2005-04-12 12:24:33')
 
100
 
    ['date:2005-04-12 12:24:33']
 
 
98
    [<RevisionSpec_date date:2005-04-12 12:24:33>]
 
101
99
    >>> _parse_revision_str('date:2005-04-12T12:24:33')
 
102
 
    ['date:2005-04-12T12:24:33']
 
 
100
    [<RevisionSpec_date date:2005-04-12T12:24:33>]
 
103
101
    >>> _parse_revision_str('date:2005-04-12,12:24:33')
 
104
 
    ['date:2005-04-12,12:24:33']
 
 
102
    [<RevisionSpec_date date:2005-04-12,12:24:33>]
 
105
103
    >>> _parse_revision_str('-5..23')
 
 
104
    [<RevisionSpec_int -5>, <RevisionSpec_int 23>]
 
107
105
    >>> _parse_revision_str('-5')
 
 
106
    [<RevisionSpec_int -5>]
 
109
107
    >>> _parse_revision_str('123a')
 
 
108
    Traceback (most recent call last):
 
 
110
    BzrError: No namespace registered for string: '123a'
 
111
111
    >>> _parse_revision_str('abc')
 
 
112
    Traceback (most recent call last):
 
 
114
    BzrError: No namespace registered for string: 'abc'
 
115
117
    old_format_re = re.compile('\d*:\d*')
 
116
118
    m = old_format_re.match(revstr)
 
118
121
        warning('Colon separator for revision numbers is deprecated.'
 
119
122
                ' Use .. instead')
 
121
123
        for rev in revstr.split(':'):
 
123
 
                revs.append(int(rev))
 
128
 
    for x in revstr.split('..'):
 
 
125
                revs.append(RevisionSpec(int(rev)))
 
 
127
                revs.append(RevisionSpec(None))
 
 
129
        for x in revstr.split('..'):
 
 
131
                revs.append(RevisionSpec(None))
 
 
133
                revs.append(RevisionSpec(x))
 
 
417
415
    >>> parse_args('commit --message=biter'.split())
 
418
416
    (['commit'], {'message': u'biter'})
 
419
417
    >>> parse_args('log -r 500'.split())
 
420
 
    (['log'], {'revision': [500]})
 
 
418
    (['log'], {'revision': [<RevisionSpec_int 500>]})
 
421
419
    >>> parse_args('log -r500..600'.split())
 
422
 
    (['log'], {'revision': [500, 600]})
 
 
420
    (['log'], {'revision': [<RevisionSpec_int 500>, <RevisionSpec_int 600>]})
 
423
421
    >>> parse_args('log -vr500..600'.split())
 
424
 
    (['log'], {'verbose': True, 'revision': [500, 600]})
 
425
 
    >>> parse_args('log -rv500..600'.split()) #the r takes an argument
 
426
 
    (['log'], {'revision': ['v500', 600]})
 
 
422
    (['log'], {'verbose': True, 'revision': [<RevisionSpec_int 500>, <RevisionSpec_int 600>]})
 
 
423
    >>> parse_args('log -rrevno:500..600'.split()) #the r takes an argument
 
 
424
    (['log'], {'revision': [<RevisionSpec_revno revno:500>, <RevisionSpec_int 600>]})