~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revisionspec.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-03-01 07:30:00 UTC
  • mfrom: (2220.2.49 tags)
  • Revision ID: pqm@pqm.ubuntu.com-20070301073000-0bfe1394fee5e712
(mbp) tags in branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
93
93
        return '<bzrlib.revisionspec.RevisionInfo object %s, %s for %r>' % (
94
94
            self.revno, self.rev_id, self.branch)
95
95
 
 
96
    @staticmethod
 
97
    def from_revision_id(branch, revision_id, revs):
 
98
        """Construct a RevisionInfo given just the id.
 
99
 
 
100
        Use this if you don't know or care what the revno is.
 
101
        """
 
102
        try:
 
103
            revno = revs.index(revision_id) + 1
 
104
        except ValueError:
 
105
            revno = None
 
106
        return RevisionInfo(branch, revno, revision_id)
 
107
 
96
108
 
97
109
# classes in this list should have a "prefix" attribute, against which
98
110
# string specs are matched
367
379
    prefix = 'revid:'
368
380
 
369
381
    def _match_on(self, branch, revs):
370
 
        try:
371
 
            revno = revs.index(self.spec) + 1
372
 
        except ValueError:
373
 
            revno = None
374
 
        return RevisionInfo(branch, revno, self.spec)
 
382
        return RevisionInfo.from_revision_id(branch, self.spec, revs)
375
383
 
376
384
SPEC_TYPES.append(RevisionSpec_revid)
377
385
 
465
473
 
466
474
 
467
475
class RevisionSpec_tag(RevisionSpec):
468
 
    """To be implemented."""
469
 
 
470
 
    help_txt = """To be implemented."""
 
476
    """Select a revision identified by tag name"""
 
477
 
 
478
    help_txt = """Selects a revision identified by a tag name.
 
479
 
 
480
    Tags are stored in the repository and created by the 'tag'
 
481
    command.
 
482
    """
471
483
 
472
484
    prefix = 'tag:'
473
485
 
474
486
    def _match_on(self, branch, revs):
475
 
        raise errors.InvalidRevisionSpec(self.user_spec, branch,
476
 
                                         'tag: namespace registered,'
477
 
                                         ' but not implemented')
 
487
        # Can raise tags not supported, NoSuchTag, etc
 
488
        return RevisionInfo.from_revision_id(branch,
 
489
            branch.tags.lookup_tag(self.spec),
 
490
            revs)
478
491
 
479
492
SPEC_TYPES.append(RevisionSpec_tag)
480
493