Ticket #781: icachechangesetlistener.diff
| File icachechangesetlistener.diff, 2.6 KB (added by techtonik <techtonik@…>, 3 years ago) |
|---|
-
trac/core.py
17 17 # Christopher Lenz <cmlenz@gmx.de> 18 18 19 19 __all__ = ['Component', 'ExtensionPoint', 'implements', 'Interface', 20 'TracError' ]20 'TracError', 'ComponentManager'] 21 21 22 22 23 23 class TracError(Exception): -
trac/versioncontrol/cache.py
17 17 import posixpath 18 18 from datetime import datetime 19 19 20 from trac.core import TracError20 from trac.core import * 21 21 from trac.util.datefmt import utc, to_timestamp 22 22 from trac.util.translation import _ 23 23 from trac.versioncontrol import Changeset, Node, Repository, Authorizer, \ … … 35 35 CACHE_METADATA_KEYS = (CACHE_REPOSITORY_DIR, CACHE_YOUNGEST_REV) 36 36 37 37 38 class ICacheChangesetListener(Interface): 39 """Cached changeset operations""" 40 41 def edit_changeset(cset): 42 """Called when changeset is about to be cached. 43 Returns altered data to cache or None if unchanged. cset usually 44 contains cset.date, cset.author, cset.message and cset.rev 45 """ 46 47 class CacheManager(Component): 48 """Provide interface to plug-in into cache operations""" 49 50 observers = ExtensionPoint(ICacheChangesetListener) 51 52 def check_changeset(self, cset): 53 for observer in self.observers: 54 res = observer.edit_changeset(cset) 55 if res != None: 56 cset = res 57 return cset 58 59 38 60 class CachedRepository(Repository): 39 61 40 62 has_linear_changesets = False … … 46 68 else: 47 69 self.getdb = lambda: getdb 48 70 self.repos = repos 71 self.cache_mgr = CacheManager(ComponentManager()) 49 72 50 73 def close(self): 51 74 self.repos.close() … … 74 97 75 98 def sync_changeset(self, rev): 76 99 cset = self.repos.get_changeset(rev) 100 cset = self.cache_mgr.check_changeset(cset) 77 101 db = self.getdb() 78 102 cursor = db.cursor() 79 103 cursor.execute("UPDATE revision SET time=%s, author=%s, message=%s " … … 178 202 self.log.info("Trying to sync revision [%s]" % 179 203 next_youngest) 180 204 cset = self.repos.get_changeset(next_youngest) 205 cset = self.cache_mgr.check_changeset(cset) 181 206 try: 182 207 cursor.execute("INSERT INTO revision " 183 208 " (rev,time,author,message) "
