~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisionspec.py

  • Committer: John Arbash Meinel
  • Date: 2006-08-23 20:09:40 UTC
  • mto: This revision was merged to the branch mainline in revision 1979.
  • Revision ID: john@arbash-meinel.com-20060823200940-cc4d69c61466ef4f
Refactor common code from integer revno handlers
test and fix a bug with revno:-1:branch, which would use the original
branch to determine the real revno, rather than the new one

Show diffs side-by-side

added added

removed removed

Lines of Context:
187
187
        """
188
188
        return True
189
189
 
 
190
 
190
191
# private API
191
192
 
 
193
def _get_int_revno_helper(branch, revs, revno, spec):
 
194
    """Just a helper for the common functionality between int and revno specs.
 
195
 
 
196
    :param branch: The branch to lookup the revno in
 
197
    :param revno: In integer revision number
 
198
    :param revs: The list of revisions we are looking through
 
199
    :param spec: The revision spec being tested. This is only used
 
200
        to pass through to a potential exception
 
201
    :return: A RevisionInfo object (or an exception)
 
202
    """
 
203
    if revno < 0:
 
204
        revno = len(revs) + revno + 1
 
205
    try:
 
206
        revision_id = branch.get_rev_id(revno, revs)
 
207
    except NoSuchRevision:
 
208
        raise errors.InvalidRevisionSpec(spec, branch)
 
209
    return RevisionInfo(branch, revno, revision_id)
 
210
 
 
211
 
192
212
class RevisionSpec_int(RevisionSpec):
193
213
    """Spec is a number.  Special case."""
194
214
 
196
216
        self.spec = int(spec)
197
217
 
198
218
    def _match_on(self, branch, revs):
199
 
        if self.spec < 0:
200
 
            revno = len(revs) + self.spec + 1
201
 
        else:
202
 
            revno = self.spec
203
 
        try:
204
 
            rev_id = branch.get_rev_id(revno, revs)
205
 
        except NoSuchRevision:
206
 
            raise errors.InvalidRevisionSpec(self.spec, branch)
207
 
        return RevisionInfo(branch, revno, rev_id)
 
219
        return _get_int_revno_helper(branch, revs, self.spec, self.spec)
208
220
 
209
221
 
210
222
class RevisionSpec_revno(RevisionSpec):
232
244
                raise errors.InvalidRevisionSpec(self.prefix + self.spec,
233
245
                                                 branch, e)
234
246
 
235
 
            if revno < 0:
236
 
                revno = len(revs) + revno + 1
237
 
 
238
247
        if branch_spec:
239
248
            from bzrlib.branch import Branch
240
249
            branch = Branch.open(branch_spec)
241
 
 
242
 
        try:
243
 
            revid = branch.get_rev_id(revno)
244
 
        except NoSuchRevision:
245
 
            raise errors.InvalidRevisionSpec(self.prefix + self.spec, branch)
246
 
 
247
 
        return RevisionInfo(branch, revno)
 
250
            # Need to use a new revision history
 
251
            # because we are using a specific branch
 
252
            revs = branch.revision_history()
 
253
 
 
254
        return _get_int_revno_helper(branch, revs, revno,
 
255
                                     self.prefix + self.spec)
248
256
        
249
257
    def needs_branch(self):
250
258
        return self.spec.find(':') == -1