Edgewall Software

Ticket #4132: sync_only_once-r4292.diff

File sync_only_once-r4292.diff, 2.4 KB (added by cboos, 5 years ago)

Only sync the repository once per request.

  • trac/versioncontrol/api.py

     
    2424from trac.config import Option 
    2525from trac.core import * 
    2626from trac.perm import PermissionError 
     27from trac.web.api import IRequestFilter 
    2728 
    2829 
    2930class IRepositoryConnector(Interface): 
     
    5051    It provides easy access to the configured implementation. 
    5152    """ 
    5253 
     54    implements(IRequestFilter) 
     55 
    5356    connectors = ExtensionPoint(IRepositoryConnector) 
    5457 
    5558    repository_type = Option('trac', 'repository_type', 'svn', 
     
    6265        self._lock = threading.Lock() 
    6366        self._connector = None 
    6467 
     68    # IRequestFilter methods 
     69 
     70    def pre_process_request(self, req, handler): 
     71        from trac.web.chrome import Chrome         
     72        if handler is not Chrome(self.env): 
     73            repos = self.get_repository(req.authname) 
     74            if hasattr(repos, 'sync'): 
     75                repos.sync() 
     76        return handler 
     77 
     78    def post_process_request(self, req, template, content_type): 
     79        return (template, content_type) 
     80 
     81 
    6582    # Public API methods 
    6683 
    6784    def get_repository(self, authname): 
  • trac/versioncontrol/cache.py

     
    3434        Repository.__init__(self, repos.name, authz, log) 
    3535        self.db = db 
    3636        self.repos = repos 
    37         self.synced = 0 
    3837 
    3938    def close(self): 
    4039        self.repos.close() 
    4140 
    4241    def get_changeset(self, rev): 
    43         if not self.synced: 
    44             self.sync() 
    45             self.synced = 1 
    4642        return CachedChangeset(self.repos, self.repos.normalize_rev(rev), 
    4743                               self.db, self.authz) 
    4844 
    4945    def get_changesets(self, start, stop): 
    50         if not self.synced: 
    51             self.sync() 
    52             self.synced = 1 
    5346        cursor = self.db.cursor() 
    5447        cursor.execute("SELECT rev FROM revision " 
    5548                       "WHERE time >= %s AND time < %s " 
     
    123116        return self.repos.oldest_rev 
    124117 
    125118    def get_youngest_rev(self): 
    126         return self.repos.youngest_rev 
     119        return self.repos.get_youngest_rev_in_cache(self.db) 
    127120 
    128121    def previous_rev(self, rev): 
    129122        return self.repos.previous_rev(rev)