Ticket #4132: sync_only_once_0.10-stable-r4280.diff
| File sync_only_once_0.10-stable-r4280.diff, 4.2 KB (added by cboos, 2 years ago) |
|---|
-
trac/versioncontrol/api.py
24 24 from trac.config import Option 25 25 from trac.core import * 26 26 from trac.perm import PermissionError 27 from trac.web.api import IRequestFilter 27 28 28 29 29 30 class IRepositoryConnector(Interface): … … 50 51 It provides easy access to the configured implementation. 51 52 """ 52 53 54 implements(IRequestFilter) 55 53 56 connectors = ExtensionPoint(IRepositoryConnector) 54 57 55 58 repository_type = Option('trac', 'repository_type', 'svn', … … 62 65 self._lock = threading.Lock() 63 66 self._connector = None 64 67 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 65 82 # Public API methods 66 83 67 84 def get_repository(self, authname): … … 120 137 """Close the connection to the repository.""" 121 138 raise NotImplementedError 122 139 140 def clear(self): 141 """Clear any data that may have been cached in instance properties.""" 142 pass 143 123 144 def get_changeset(self, rev): 124 145 """Retrieve a Changeset corresponding to the given revision `rev`.""" 125 146 raise NotImplementedError -
trac/versioncontrol/svn_fs.py
307 307 308 308 self.log.debug("Opening subversion file-system at %s with scope %s" \ 309 309 % (self.path, self.scope)) 310 self.clear() 311 312 def clear(self): 310 313 self.youngest = None 311 314 self.oldest = None 312 315 -
trac/versioncontrol/cache.py
31 31 Repository.__init__(self, repos.name, authz, log) 32 32 self.db = db 33 33 self.repos = repos 34 self.sync ed = 034 self.sync() 35 35 36 36 def close(self): 37 37 self.repos.close() 38 38 39 39 def get_changeset(self, rev): 40 if not self.synced:41 self.sync()42 self.synced = 143 40 return CachedChangeset(self.repos.normalize_rev(rev), self.db, 44 41 self.authz) 45 42 46 43 def get_changesets(self, start, stop): 47 if not self.synced:48 self.sync()49 self.synced = 150 44 cursor = self.db.cursor() 51 45 cursor.execute("SELECT rev FROM revision " 52 46 "WHERE time >= %s AND time < %s " … … 71 65 raise TracError, ("The 'repository_dir' has changed, " 72 66 "a 'trac-admin resync' operation is needed.") 73 67 68 self.repos.clear() 74 69 youngest_stored = self.repos.get_youngest_rev_in_cache(self.db) 75 70 76 71 if youngest_stored != str(self.repos.youngest_rev): … … 107 102 (str(current_rev), path, kind, action, 108 103 base_path, base_rev)) 109 104 current_rev = self.repos.next_rev(current_rev) 110 try: 111 self.db.commit() 112 except: 113 # See <http://trac.edgewall.org/ticket/4120>: this breaks badly 114 # while rendering the timeline, because the commit happens 115 # while iterating over a recordset 116 pass 105 self.db.commit() 117 106 self.repos.authz = authz # restore permission checking 118 107 119 108 def get_node(self, path, rev=None): … … 126 115 return self.repos.oldest_rev 127 116 128 117 def get_youngest_rev(self): 129 return self.repos. youngest_rev118 return self.repos.get_youngest_rev_in_cache(self.db) 130 119 131 120 def previous_rev(self, rev): 132 121 return self.repos.previous_rev(rev)
