Changeset 3188

Show
Ignore:
Timestamp:
02/06/08 11:04:11 (10 months ago)
Author:
hvr
Message:

handle tags that point to git tag objects by performing an additional lookup to the actual commit object (addresses #789)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gitplugin/0.11/gitplugin/PyGIT.py

    r3187 r3188  
    105105            self.logger.debug("triggered rebuild of commit tree db for %d" % id(self)) 
    106106            new_db = {} 
     107            new_tags = set([]) 
    107108            parent = None 
    108109            youngest = None 
    109110            ord_rev = 0 
     111            for revs in self._git_call_f("git-rev-parse --tags").readlines(): 
     112                new_tags.add(revs.strip()) 
     113 
    110114            for revs in self._git_call_f("git-rev-list --parents --all").readlines(): 
    111115                revs = revs.strip().split() 
     
    136140                        new_db[parent] = (set([rev]), set(), 0) # dummy ordinal_id 
    137141 
    138             self._commit_db = new_db, parent 
     142            self._commit_db = new_db, parent, new_tags 
    139143            self.last_youngest_rev = youngest 
    140144            self.logger.debug("rebuilt commit tree db for %d with %d entries" % (id(self),len(new_db))) 
     
    221225 
    222226        db = self.get_commits() 
     227        tag_db = self._commit_db[2] 
     228 
    223229        if db.has_key(rev): 
    224230            return rev 
     
    227233        if len(rc)==0: 
    228234            return None 
    229         return rc 
     235 
     236        if db.has_key(rc): 
     237            return rc 
     238        elif rc in tag_db: 
     239            sha=self._git_call("git-cat-file tag '%s'" % rc).split(None, 2)[:2] 
     240            if sha[0] != 'object': 
     241                self.logger.debug("unexpected result from 'git-cat-file tag %s'" % rc) 
     242                return None 
     243            return sha[1] 
     244 
     245        return None 
    230246 
    231247    def shortrev(self,rev): 
     
    256272 
    257273    def read_commit(self, sha): 
     274        if not sha: 
     275            raise GitErrorSha 
     276 
    258277        db = self.get_commits() 
    259278        if sha not in db: