~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisionspec.py

merge in John Meinels integration branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
        if spec is None:
111
111
            return object.__new__(RevisionSpec, spec)
112
112
 
 
113
        if isinstance(spec, RevisionSpec):
 
114
            return object.__new__(type(spec), spec)
 
115
 
113
116
        try:
114
117
            spec = int(spec)
115
118
        except ValueError:
116
119
            pass
 
120
        except TypeError:
 
121
            raise TypeError('Unexpected type, got %s, %r' % (type(spec), spec))
 
122
 
117
123
 
118
124
        if isinstance(spec, int):
119
125
            return object.__new__(RevisionSpec_int, spec)
128
134
            raise TypeError('Unhandled revision type %s' % spec)
129
135
 
130
136
    def __init__(self, spec):
131
 
        if self.prefix and spec.startswith(self.prefix):
132
 
            spec = spec[len(self.prefix):]
133
 
        self.spec = spec
 
137
        if isinstance(spec, RevisionSpec):
 
138
            self.spec = spec.spec
 
139
        else:
 
140
            if self.prefix and spec.startswith(self.prefix):
 
141
                spec = spec[len(self.prefix):]
 
142
            self.spec = spec
134
143
 
135
144
    def _match_on(self, branch, revs):
136
145
        return RevisionInfo(branch, 0, None)
157
166
                              self.prefix or '',
158
167
                              self.spec)
159
168
 
 
169
    def __eq__(self, other):
 
170
        if isinstance(other, RevisionSpec):
 
171
            return self.spec == other.spec
 
172
        return other == self.spec
 
173
 
160
174
 
161
175
# private API
162
176
 
163
177
class RevisionSpec_int(RevisionSpec):
164
178
    """Spec is a number.  Special case."""
165
179
    def __init__(self, spec):
166
 
        self.spec = int(spec)
 
180
        if isinstance(spec, RevisionSpec):
 
181
            self.spec = int(spec.spec)
 
182
        else:
 
183
            self.spec = int(spec)
167
184
 
168
185
    def _match_on(self, branch, revs):
169
186
        if self.spec < 0: