1.1 --- a/patches/pageparams-caching-1.8.diff Sat Jan 25 18:40:51 2014 +0100
1.2 +++ b/patches/pageparams-caching-1.8.diff Sat Jan 25 23:11:24 2014 +0100
1.3 @@ -116,3 +116,100 @@
1.4 if request.args:
1.5 args = request.args.items()
1.6 args.sort()
1.7 +# HG changeset patch
1.8 +# User Paul Boddie <paul@boddie.org.uk>
1.9 +# Date 1390675730 -3600
1.10 +# Node ID 561fe9439debfd095753a32d884383c315dde7ec
1.11 +# Parent 02d1fa8951523776357a9a37235ad5c37f42fcc8
1.12 +Added tracking of reported dependencies and prevented generation of specific
1.13 +cache entries for request parameter combinations when no extension requires or
1.14 +supports such specific entries.
1.15 +
1.16 +diff -r 02d1fa895152 -r 561fe9439deb MoinMoin/Page.py
1.17 +--- a/MoinMoin/Page.py Fri Jan 24 22:44:56 2014 +0100
1.18 ++++ b/MoinMoin/Page.py Sat Jan 25 19:48:50 2014 +0100
1.19 +@@ -1339,9 +1339,12 @@
1.20 +
1.21 + def loadCache(self, request):
1.22 + """ Return page content cache or raises 'CacheNeedsUpdate' """
1.23 +- cache = caching.CacheEntry(request, self, self.getCacheKey(request), scope='item')
1.24 +- attachmentsPath = self.getPagePath('attachments', check_create=0)
1.25 +- if cache.needsUpdate(self._text_filename(), attachmentsPath):
1.26 ++ for with_params in (True, False):
1.27 ++ cache = caching.CacheEntry(request, self, self.getCacheKey(request, with_params), scope='item')
1.28 ++ attachmentsPath = self.getPagePath('attachments', check_create=0)
1.29 ++ if not cache.needsUpdate(self._text_filename(), attachmentsPath):
1.30 ++ break
1.31 ++ else:
1.32 + raise Exception('CacheNeedsUpdate')
1.33 +
1.34 + import marshal
1.35 +@@ -1373,7 +1376,10 @@
1.36 + code = compile(src.encode(config.charset),
1.37 + self.page_name.encode(config.charset), 'exec')
1.38 + self.enforceCacheLimit(request)
1.39 +- cache = caching.CacheEntry(request, self, self.getCacheKey(request), scope='item')
1.40 ++ # Determine whether the parameters/args need to be incorporated into the
1.41 ++ # cache entry key.
1.42 ++ with_params = "pageparams" in formatter.getReportedDependencies()
1.43 ++ cache = caching.CacheEntry(request, self, self.getCacheKey(request, with_params), scope='item')
1.44 + cache.update(marshal.dumps(code))
1.45 + return code
1.46 +
1.47 +@@ -1392,10 +1398,10 @@
1.48 + for item_age, item in item_ages[:-cache_limit]:
1.49 + item.remove()
1.50 +
1.51 +- def getCacheKey(self, request):
1.52 ++ def getCacheKey(self, request, with_params=False):
1.53 + """ Generate a cache key for a page using optional request information """
1.54 + key = self.getFormatterName(request)
1.55 +- if request.args:
1.56 ++ if with_params and request.args:
1.57 + args = request.args.items()
1.58 + args.sort()
1.59 + key_args = []
1.60 +diff -r 02d1fa895152 -r 561fe9439deb MoinMoin/formatter/text_python.py
1.61 +--- a/MoinMoin/formatter/text_python.py Fri Jan 24 22:44:56 2014 +0100
1.62 ++++ b/MoinMoin/formatter/text_python.py Sat Jan 25 19:48:50 2014 +0100
1.63 +@@ -10,6 +10,7 @@
1.64 +
1.65 + import time
1.66 + from MoinMoin import wikiutil
1.67 ++from MoinMoin.support.python_compatibility import set
1.68 +
1.69 +
1.70 + class Formatter:
1.71 +@@ -40,6 +41,12 @@
1.72 + self.text_cmd_begin = '\nrequest.write('
1.73 + self.text_cmd_end = ')\n'
1.74 +
1.75 ++ # Record dependency requirements of certain content
1.76 ++ self.__dependencies = set()
1.77 ++
1.78 ++ def getReportedDependencies(self):
1.79 ++ return self.__dependencies
1.80 ++
1.81 + def assemble_code(self, text):
1.82 + """inserts the code into the generated text
1.83 + """
1.84 +@@ -186,7 +193,10 @@
1.85 + return self.formatter.div(on, **kw)
1.86 +
1.87 + def macro(self, macro_obj, name, args, markup=None):
1.88 +- if self.__is_static(macro_obj.get_dependencies(name)):
1.89 ++ Dependencies = macro_obj.get_dependencies(name)
1.90 ++ self.__dependencies.update(Dependencies)
1.91 ++
1.92 ++ if self.__is_static(Dependencies):
1.93 + # XXX: why is this necessary??
1.94 + macro_obj.formatter = self
1.95 + return macro_obj.execute(name, args)
1.96 +@@ -204,6 +214,7 @@
1.97 + Dependencies = wikiutil.searchAndImportPlugin(self.request.cfg, "parser", parser_name, "Dependencies")
1.98 + except (wikiutil.PluginMissingError, wikiutil.PluginAttributeError):
1.99 + Dependencies = self.defaultDependencies
1.100 ++ self.__dependencies.update(Dependencies)
1.101 +
1.102 + if self.__is_static(Dependencies):
1.103 + return self.formatter.parser(parser_name, lines)