Edgewall Software

Ticket #7723: 7723-youngest-rev-r8299.patch

File 7723-youngest-rev-r8299.patch, 3.6 KB (added by rblank, 3 years ago)

Make consistent use of youngest_rev in CachedRepository.

  • trac/versioncontrol/cache.py

    diff --git a/trac/versioncontrol/cache.py b/trac/versioncontrol/cache.py
    a b  
    6767        return self.repos.get_base() 
    6868         
    6969    def get_quickjump_entries(self, rev): 
    70         for category, name, path, rev in self.repos.get_quickjump_entries(rev): 
    71             yield category, name, path, rev 
     70        return self.repos.get_quickjump_entries(self.normalize_rev(rev)) 
    7271 
    7372    def get_changeset(self, rev): 
    74         return CachedChangeset(self.repos, self.repos.normalize_rev(rev), 
     73        return CachedChangeset(self.repos, self.normalize_rev(rev), 
    7574                               self.env, self.authz) 
    7675 
    7776    def get_changesets(self, start, stop): 
     
    274273                self.repos.authz = authz 
    275274 
    276275    def get_node(self, path, rev=None): 
    277         return self.repos.get_node(path, rev) 
     276        return self.repos.get_node(path, self.normalize_rev(rev)) 
    278277 
    279278    def _get_node_revs(self, path, rev=None): 
    280279        """Return the revisions affecting `path` between its creation and 
     
    303302        return revs[bisect.bisect_left(revs, created):] 
    304303 
    305304    def has_node(self, path, rev=None): 
    306         return self.repos.has_node(path, rev) 
     305        return self.repos.has_node(path, self.normalize_rev(rev)) 
    307306 
    308307    def get_oldest_rev(self): 
    309308        return self.repos.oldest_rev 
     
    315314        if self.has_linear_changesets: 
    316315            return self._next_prev_rev('<', rev, path) 
    317316        else: 
    318             return self.repos.previous_rev(rev, path) 
     317            return self.repos.previous_rev(self.normalize_rev(rev), path) 
    319318 
    320319    def next_rev(self, rev, path=''): 
    321320        if self.has_linear_changesets: 
    322321            return self._next_prev_rev('>', rev, path) 
    323322        else: 
    324             return self.repos.next_rev(rev, path) 
     323            return self.repos.next_rev(self.normalize_rev(rev), path) 
    325324 
    326325    def _next_prev_rev(self, direction, rev, path=''): 
    327326        db = self.env.get_db_cnx() 
     
    358357            return rev 
    359358 
    360359    def rev_older_than(self, rev1, rev2): 
    361         return self.repos.rev_older_than(rev1, rev2) 
     360        return self.repos.rev_older_than(self.normalize_rev(rev1), 
     361                                         self.normalize_rev(rev2)) 
    362362 
    363363    def get_path_history(self, path, rev=None, limit=None): 
    364         return self.repos.get_path_history(path, rev, limit) 
     364        return self.repos.get_path_history(path, self.normalize_rev(rev), 
     365                                           limit) 
    365366 
    366367    def normalize_path(self, path): 
    367368        return self.repos.normalize_path(path) 
    368369 
    369370    def normalize_rev(self, rev): 
    370         return self.repos.normalize_rev(rev) 
     371        if rev is None or isinstance(rev, basestring) and \ 
     372               rev.lower() in ('', 'head', 'latest', 'youngest'): 
     373            return self.youngest_rev 
     374        else: 
     375            try: 
     376                rev = int(rev) 
     377                if rev <= self.youngest_rev: 
     378                    return rev 
     379            except (ValueError, TypeError): 
     380                pass 
     381            raise NoSuchChangeset(rev) 
    371382 
    372383    def get_changes(self, old_path, old_rev, new_path, new_rev,  
    373             ignore_ancestry=1): 
    374         return self.repos.get_changes(old_path, old_rev, new_path, new_rev,  
    375                 ignore_ancestry) 
     384                    ignore_ancestry=1): 
     385        return self.repos.get_changes(old_path, self.normalize_rev(old_rev), 
     386                                      new_path, self.normalize_rev(new_rev),  
     387                                      ignore_ancestry) 
    376388 
    377389 
    378390class CachedChangeset(Changeset):