changeset 1327:506d04a9ceee

Merge with main.
author Alexander Schremmer <alex AT alexanderweb DOT de>
date Sat, 19 Aug 2006 01:02:56 +0200
parents 0c3927a3b8a2 (current diff) 27b315229e82 (diff)
children f6801f7e4d59
files MoinMoin/xmlrpc/__init__.py
diffstat 21 files changed, 85 insertions(+), 78 deletions(-) [+]
line wrap: on
line diff
--- a/MoinMoin/PageEditor.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/PageEditor.py	Sat Aug 19 01:02:56 2006 +0200
@@ -831,14 +831,11 @@
         
         if not os.path.exists(pagedir): # new page, create and init pagedir
             os.mkdir(pagedir)
-            os.chmod(pagedir, 0777 & config.umask)
         if not os.path.exists(revdir):        
             os.mkdir(revdir)
-            os.chmod(revdir, 0777 & config.umask)
             f = open(cfn, 'w')
             f.write('%08d\n' % 0)
             f.close()
-            os.chmod(cfn, 0666 & config.umask)
             
         got_lock = False
         retry = 0
@@ -878,7 +875,6 @@
                 # Write the file using text/* mime type
                 f.write(self.encodeTextMimeType(text))
                 f.close()
-                os.chmod(pagefile, 0666 & config.umask)
                 mtime_usecs = wikiutil.timestamp2version(os.path.getmtime(pagefile))
                 # set in-memory content
                 self.set_raw_body(text)
--- a/MoinMoin/PageGraphicalEditor.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/PageGraphicalEditor.py	Sat Aug 19 01:02:56 2006 +0200
@@ -249,13 +249,13 @@
         lang = self.language or self.request.cfg.language_default
         contentlangdirection = i18n.getDirection(lang) # 'ltr' or 'rtl'
         uilanguage = self.request.lang
-        url_prefix = self.request.cfg.url_prefix
+        url_prefix_static = self.request.cfg.url_prefix_static
         wikipage = wikiutil.quoteWikinameURL(self.page_name)
-        fckbasepath = url_prefix + '/applets/FCKeditor'
+        fckbasepath = url_prefix_static + '/applets/FCKeditor'
         wikiurl = request.getScriptname()
         if not wikiurl or wikiurl[-1] != '/':
             wikiurl += '/'
-        themepath = '%s/%s' % (url_prefix, self.request.theme.name)
+        themepath = '%s/%s' % (url_prefix_static, self.request.theme.name)
         smileypath = themepath + '/img'
         # auto-generating a list for SmileyImages does NOT work from here!
         editor_size = int(request.user.edit_rows) * 22 # 22 height_pixels/line
@@ -269,8 +269,8 @@
     oFCKeditor.BasePath= '%(fckbasepath)s/' ;
     oFCKeditor.Config['WikiBasePath'] = '%(wikiurl)s' ;
     oFCKeditor.Config['WikiPage'] = '%(wikipage)s' ;
-    oFCKeditor.Config['PluginsPath'] = '%(url_prefix)s/applets/moinFCKplugins/' ;
-    oFCKeditor.Config['CustomConfigurationsPath'] = '%(url_prefix)s/applets/moinfckconfig.js'  ;
+    oFCKeditor.Config['PluginsPath'] = '%(url_prefix_static)s/applets/moinFCKplugins/' ;
+    oFCKeditor.Config['CustomConfigurationsPath'] = '%(url_prefix_static)s/applets/moinfckconfig.js'  ;
     oFCKeditor.Config['WordRule'] = %(word_rule)s ;
     oFCKeditor.Config['SmileyPath'] = '%(smileypath)s/' ;
     oFCKeditor.Config['EditorAreaCSS'] = '%(themepath)s/css/common.css' ;
--- a/MoinMoin/action/AttachFile.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/action/AttachFile.py	Sat Aug 19 01:02:56 2006 +0200
@@ -189,7 +189,6 @@
             stream.write(filecontent)
         finally:
             stream.close()
-        os.chmod(fpath, 0666 & config.umask)
 
         _addLogEntry(request, 'ATTNEW', pagename, target)
 
@@ -380,7 +379,7 @@
     _ = request.getText
 
     now = time.time()
-    pubpath = request.cfg.url_prefix + "/applets/TWikiDrawPlugin"
+    pubpath = request.cfg.url_prefix_static + "/applets/TWikiDrawPlugin"
     basename = request.form['drawing'][0]
     drawpath = getAttachUrl(pagename, basename + '.draw', request, escaped=1)
     pngpath = getAttachUrl(pagename, basename + '.png', request, escaped=1)
@@ -625,7 +624,6 @@
             stream.write(filecontent)
         finally:
             stream.close()
-        os.chmod(savepath, 0666 & config.umask)
 
     # touch attachment directory to invalidate cache if new map is saved
     if ext == '.map':
@@ -760,7 +758,6 @@
                                     os.unlink(new_file)
                                 else:
                                     valid_name = True
-                                    os.chmod(new_file, 0666 & config.umask)
                                     _addLogEntry(request, 'ATTNEW', pagename, finalname)
 
                 if valid_name:
--- a/MoinMoin/action/PackagePages.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/action/PackagePages.py	Sat Aug 19 01:02:56 2006 +0200
@@ -113,8 +113,6 @@
         zf.writestr(MOIN_PACKAGE_FILE, u"\n".join(script).encode("utf-8"))
         zf.close()
 
-        os.chmod(fpath, 0666 & config.umask)
-
         _addLogEntry(self.request, 'ATTNEW', self.pagename, target)
 
         raise ActionError(_("Created the package %s containing the pages %s.") % (wikiutil.escape(target), wikiutil.escape(pagelist)))
--- a/MoinMoin/action/fckdialog.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/action/fckdialog.py	Sat Aug 19 01:02:56 2006 +0200
@@ -87,7 +87,7 @@
        <td valign="top">
        <span fckLang="MacroDlgName">Macro Name</span><br>
        <select id="txtName" size="10" onchange="OnChange(this.value);">
-''' % request.cfg.url_prefix)
+''' % request.cfg.url_prefix_static)
 
     macros = []
     for macro in macro_list(request):
@@ -240,7 +240,7 @@
         ['<option value="%s">%s</option>' % (key, key) for key in resultlist])
 
     # wiki url
-    url_prefix = request.cfg.url_prefix
+    url_prefix_static = request.cfg.url_prefix_static
     scriptname = request.getScriptname()
     if not scriptname or scriptname[-1] != "/":
         scriptname += "/"
@@ -275,9 +275,9 @@
   <title>Link Properties</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <meta name="robots" content="noindex,nofollow" />
-  <script src="%(url_prefix)s/applets/FCKeditor/editor/dialog/common/fck_dialog_common.js" type="text/javascript"></script>
-  <script src="%(url_prefix)s/applets/moinFCKplugins/moinlink/fck_link.js" type="text/javascript"></script>
-  <script src="%(url_prefix)s/applets/moinFCKplugins/moinurllib.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/FCKeditor/editor/dialog/common/fck_dialog_common.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/moinFCKplugins/moinlink/fck_link.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/moinFCKplugins/moinurllib.js" type="text/javascript"></script>
  </head>
  <body scroll="no" style="OVERFLOW: hidden">
   <div id="divInfo" style="DISPLAY: none">
@@ -392,7 +392,7 @@
         page_list = ""
 
     # wiki url
-    url_prefix = request.cfg.url_prefix
+    url_prefix_static = request.cfg.url_prefix_static
     scriptname = request.getScriptname()
     if not scriptname or scriptname[-1] != "/":
         scriptname += "/"
@@ -426,9 +426,9 @@
   <title>Attachment Properties</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <meta name="robots" content="noindex,nofollow" />
-  <script src="%(url_prefix)s/applets/FCKeditor/editor/dialog/common/fck_dialog_common.js" type="text/javascript"></script>
-  <script src="%(url_prefix)s/applets/moinFCKplugins/moinattachment/fck_attachment.js" type="text/javascript"></script>
-  <script src="%(url_prefix)s/applets/moinFCKplugins/moinurllib.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/FCKeditor/editor/dialog/common/fck_dialog_common.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/moinFCKplugins/moinattachment/fck_attachment.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/moinFCKplugins/moinurllib.js" type="text/javascript"></script>
  </head>
  <body scroll="no" style="OVERFLOW: hidden">
   <div id="divInfo">
@@ -463,7 +463,7 @@
 
 def image_dialog(request):
     request.emit_http_headers()
-    url_prefix = request.cfg.url_prefix
+    url_prefix_static = request.cfg.url_prefix_static
     request.write('''
 <!--
  * FCKeditor - The text editor for internet
@@ -485,9 +485,9 @@
   <title>Link Properties</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <meta name="robots" content="noindex,nofollow" />
-  <script src="%(url_prefix)s/applets/FCKeditor/editor/dialog/common/fck_dialog_common.js" type="text/javascript"></script>
-  <script src="%(url_prefix)s/applets/moinFCKplugins/moinimage/fck_image.js" type="text/javascript"></script>
-  <script src="%(url_prefix)s/applets/moinFCKplugins/moinurllib.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/FCKeditor/editor/dialog/common/fck_dialog_common.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/moinFCKplugins/moinimage/fck_image.js" type="text/javascript"></script>
+  <script src="%(url_prefix_static)s/applets/moinFCKplugins/moinurllib.js" type="text/javascript"></script>
  </head>
  <body scroll="no" style="OVERFLOW: hidden">
     <table cellspacing="0" cellpadding="0" width="100%%" border="0">
--- a/MoinMoin/caching.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/caching.py	Sat Aug 19 01:02:56 2006 +0200
@@ -99,10 +99,6 @@
                 shutil.copyfile(filename, tmpfname)
                 # this is either atomic or happening with real locks set:
                 filesys.rename(tmpfname, fname)
-                try:
-                    os.chmod(self._filename(), 0666 & config.umask)
-                except OSError:
-                    pass
             finally:
                 if self.locking:
                     self.wlock.release()
@@ -124,10 +120,6 @@
                 f.close()
                 # this is either atomic or happening with real locks set:
                 filesys.rename(tmpfname, fname)
-                try:
-                    os.chmod(fname, 0666 & config.umask)
-                except OSError:
-                    pass
             finally:
                 if self.locking:
                     self.wlock.release()
--- a/MoinMoin/config/multiconfig.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/config/multiconfig.py	Sat Aug 19 01:02:56 2006 +0200
@@ -404,7 +404,25 @@
 
     # Wiki identity
     sitename = u'Untitled Wiki'
-    url_prefix = '/wiki'
+
+    # url_prefix is DEPRECATED and not used any more by the code.
+    # it confused many people by its name and default value of '/wiki' to the
+    # wrong conclusion that it is the url of the wiki (the dynamic) stuff,
+    # but it was used to address the static stuff (images, css, js).
+    # Thus we use the more clear url_prefix_static ['/staticXXX'] setting now.
+    # For a limited time, we still look at url_prefix - if it is not None, we
+    # copy the value to url_prefix_static to ease transition.
+    url_prefix = None
+
+    # include the moin version number, so we can have a unlimited cache lifetime
+    # for the static stuff. if stuff changes on version upgrade, url will change
+    # immediately and we have no problem with stale caches.
+    url_prefix_static = '/moin_static160'
+
+    # we need to prefix actions to be able to exclude them by robots.txt:
+    # TODO:
+    # url_prefix_action = '/action'
+
     logo_string = None
     interwikiname = None
 
@@ -562,6 +580,9 @@
         self._acl_rights_default = AccessControlList(self, [self.acl_rights_default])
         self._acl_rights_after = AccessControlList(self, [self.acl_rights_after])
 
+        if self.url_prefix is not None: # remove this code when url_prefix setting is removed
+            self.url_prefix_static = self.url_prefix
+
     def load_meta_dict(self):
         """ The meta_dict contains meta data about the wiki instance. """
         if getattr(self, "_meta_dict", None) is None:
--- a/MoinMoin/converter/text_html_text_moin_wiki.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/converter/text_html_text_moin_wiki.py	Sat Aug 19 01:02:56 2006 +0200
@@ -1192,7 +1192,7 @@
                               wikiutil.url_unquote(title),
                               self.white_space])
         # Smiley
-        elif src and (self.request.cfg.url_prefix in src or '../' in src) and "img/" in src: # XXX this is dirty!
+        elif src and (self.request.cfg.url_prefix_static in src or '../' in src) and "img/" in src: # XXX this is dirty!
             filename = src.split("/")[-1]
             for markup, data in self.request.theme.icons.iteritems():
                 if data[1] == filename:
--- a/MoinMoin/logfile/__init__.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/logfile/__init__.py	Sat Aug 19 01:02:56 2006 +0200
@@ -139,11 +139,6 @@
             return self._input
         elif name == "_output":
             self._output = codecs.open(self.__filename, 'a', config.charset)
-            try:
-                os.chmod(self.__filename, 0666 & config.umask)
-            except OSError:
-                # TODO: should not ignore errors like this!
-                pass
             return self._output
         else:
             raise AttributeError(name)
--- a/MoinMoin/macro/MonthCalendar.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/macro/MonthCalendar.py	Sat Aug 19 01:02:56 2006 +0200
@@ -449,7 +449,7 @@
 // -->
 </script>
 %s
-""" % (request.cfg.url_prefix, "\n".join(maketip_js), restable)
+""" % (request.cfg.url_prefix_static, "\n".join(maketip_js), restable)
     return formatter.rawHTML(result)
 
 # EOF
--- a/MoinMoin/packages.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/packages.py	Sat Aug 19 01:02:56 2006 +0200
@@ -255,16 +255,13 @@
         revstr = '%08d' % 1
         if not os.path.exists(revdir):
             os.mkdir(revdir)
-            os.chmod(revdir, 0777 & config.umask)
 
         currentf = open(cfn, 'w')
         currentf.write(revstr + "\n")
         currentf.close()
-        os.chmod(cfn, 0666 & config.umask)
 
         pagefile = os.path.join(revdir, revstr)
         self._extractToFile(filename, pagefile)
-        os.chmod(pagefile, 0666 & config.umask)
 
         # Clear caches
         try:
--- a/MoinMoin/request/__init__.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/request/__init__.py	Sat Aug 19 01:02:56 2006 +0200
@@ -18,6 +18,13 @@
 from MoinMoin import config, wikiutil, user, caching, error
 from MoinMoin.util import IsWin9x
 
+# umask setting --------------------------------------------------------
+# We do this once per Python process, when request is imported:
+try:
+    # we need to use a bitwise inverted value of config.umask
+    os.umask(0777 ^ config.umask)
+except: # we are on win32
+    pass
 
 # Exceptions -----------------------------------------------------------
 
--- a/MoinMoin/script/export/dump.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/script/export/dump.py	Sat Aug 19 01:02:56 2006 +0200
@@ -17,7 +17,7 @@
 from MoinMoin import script
 from MoinMoin.action import AttachFile
 
-url_prefix = "."
+url_prefix_static = "."
 logo_html = '<img src="logo.png">'
 HTML_SUFFIX = ".html"
 
@@ -108,8 +108,8 @@
         self.init_request()
         request = self.request
 
-        # fix url_prefix so we get relative paths in output html
-        request.cfg.url_prefix = url_prefix
+        # fix url_prefix_static so we get relative paths in output html
+        request.cfg.url_prefix_static = url_prefix_static
 
         if self.options.page:
             pages = [self.options.page]
--- a/MoinMoin/search/results.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/search/results.py	Sat Aug 19 01:02:56 2006 +0200
@@ -654,7 +654,7 @@
 
     def _img_url(self, img):
         cfg = self.request.cfg
-        return '%s/%s/img/%s.png' % (cfg.url_prefix, self.request.theme.name, img)
+        return '%s/%s/img/%s.png' % (cfg.url_prefix_static, self.request.theme.name, img)
 
     def formatPrevNextPageLinks(self, hitsFrom, hitsPerPage, hitsNum):
         """ Format previous and next page links in page
--- a/MoinMoin/server/standalone.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/server/standalone.py	Sat Aug 19 01:02:56 2006 +0200
@@ -267,7 +267,7 @@
 class MoinRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
 
     bufferSize = 8 * 1024 # used to serve static files
-    staticExpire = 7 * 24 * 3600 # 1 week expiry for static files
+    staticExpire = 365 * 24 * 3600 # 1 year expiry for static files
 
     def __init__(self, request, client_address, server):
         self.server_version = "MoinMoin %s %s" % (version.revision,
@@ -287,13 +287,13 @@
         """ Handle requests (request type GET/HEAD/POST is in self.command)
 
         Separate between wiki pages and css and image url by similar
-        system as cgi and twisted, the '/wiki/' url prefix.
+        system as cgi and twisted, the '/staticXXX/' url prefix.
 
-        TODO: should use url_prefix - and not a constant but
+        TODO: should use url_prefix_static - and not a constant but
         request is not available at this time.  Should be fixed by
-        having url_prefix in a server config.
+        having url_prefix_static in a server config.
         """
-        if self.path.startswith('/wiki/'):
+        if self.path.startswith('/moin_static160/'): # XXX
             self.path = self.path[5:]
             self.serve_static_file()
         elif self.path in ['/favicon.ico', '/robots.txt']:
--- a/MoinMoin/theme/__init__.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/theme/__init__.py	Sat Aug 19 01:02:56 2006 +0200
@@ -156,7 +156,7 @@
         @rtype: string
         @return: the image href
         """
-        return "%s/%s/img/%s" % (self.cfg.url_prefix, self.name, img)
+        return "%s/%s/img/%s" % (self.cfg.url_prefix_static, self.name, img)
 
     def emit_custom_html(self, html):
         """
@@ -592,7 +592,7 @@
 
         # Create stylesheets links
         html = []
-        prefix = self.cfg.url_prefix
+        prefix = self.cfg.url_prefix_static
         csshref = '%s/%s/css' % (prefix, self.name)
         for media, basename in stylesheets:
             href = '%s/%s.css' % (csshref, basename)
@@ -883,7 +883,7 @@
 
     def externalScript(self, name):
         """ Format external script html """
-        src = '%s/common/js/%s.js' % (self.request.cfg.url_prefix, name)
+        src = '%s/common/js/%s.js' % (self.request.cfg.url_prefix_static, name)
         return '<script type="text/javascript" src="%s"></script>' % src
 
     def credits(self, d, **keywords):
--- a/MoinMoin/user.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/user.py	Sat Aug 19 01:02:56 2006 +0200
@@ -525,11 +525,6 @@
                 data.write(line)
         data.close()
 
-        try:
-            os.chmod(self.__filename(), 0666 & config.umask)
-        except OSError:
-            pass
-
         if not self.disabled:
             self.valid = 1
 
@@ -580,10 +575,6 @@
             bmfile = open(bm_fn, "w")
             bmfile.write(str(tm)+"\n")
             bmfile.close()
-            try:
-                os.chmod(bm_fn, 0666 & config.umask)
-            except OSError:
-                pass
 
     def getBookmark(self):
         """ Get bookmark timestamp.
@@ -869,12 +860,6 @@
                 file.write(data)
             finally:
                 file.close()
-
-            try:
-                os.chmod(path, 0666 & config.umask)
-            except OSError, err:
-                self._request.log("Can't change mode of trail file: %s" %
-                                  str(err))
         except (IOError, OSError), err:
             self._request.log("Can't save trail file: %s" % str(err))
 
--- a/MoinMoin/util/filesys.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/util/filesys.py	Sat Aug 19 01:02:56 2006 +0200
@@ -15,8 +15,12 @@
 #############################################################################
 
 def chmod(name, mode, catchexception=True):
+    """ change mode of some file/dir on platforms that support it.
+        usually you don't need this because we use os.umask() when importing
+        request.py
+    """
     try:
-        return os.chmod(name, mode)
+        os.chmod(name, mode)
     except OSError:
         if not catchexception:
             raise
@@ -31,6 +35,10 @@
     This is modified version of the os.makedirs from Python 2.4. We add
     explicit chmod call after the mkdir call. Fixes some practical
     permission problems on Linux.
+
+    TODO: we use os.umask() now so we usually don't need explicit chmod any
+          more. Check all callers os makedirs/makeDirs and also py2.3+
+          stdlib implementation and maybe remove this function here.
     """
     head, tail = os.path.split(name)
     if not tail:
@@ -86,7 +94,7 @@
             st = os.stat(src)
             mode = S_IMODE(st[ST_MODE])
             if hasattr(os, 'chmod'):
-                os.chmod(dst, mode)
+                os.chmod(dst, mode) # KEEP THIS ONE!
         #else: pass # we are on Win9x,ME - no chmod here
     else:
         shutil.copystat(src, dst)
--- a/MoinMoin/wikiutil.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/wikiutil.py	Sat Aug 19 01:02:56 2006 +0200
@@ -461,7 +461,6 @@
         metafile = codecs.open(self.metafilename, "w", "utf-8")
         metafile.write(meta)
         metafile.close()
-        filesys.chmod(self.metafilename, 0666 & config.umask)
         self.dirty = False
 
     def sync(self, mtime_usecs=None):
--- a/MoinMoin/xmlrpc/__init__.py	Sat Aug 19 01:01:58 2006 +0200
+++ b/MoinMoin/xmlrpc/__init__.py	Sat Aug 19 01:02:56 2006 +0200
@@ -823,7 +823,6 @@
         if os.path.exists(filename) and not os.path.isfile(filename):
             return self.noSuchPageFault()
         open(filename, 'wb+').write(data.data)
-        os.chmod(filename, 0666 & config.umask)
         AttachFile._addLogEntry(self.request, 'ATTNEW', pagename, filename)
         return xmlrpclib.Boolean(1)
 
--- a/docs/CHANGES	Sat Aug 19 01:01:58 2006 +0200
+++ b/docs/CHANGES	Sat Aug 19 01:02:56 2006 +0200
@@ -137,6 +137,7 @@
     * setResponseCode request method DEPRECATED (it only worked for Twisted
       anyway), just use emit_http_headers and include a Status: XXX header.
       Method will vanish with moin 1.7. 
+    * cfg.url_prefix is DEPRECATED, please use cfg.url_prefix_static.
 
   New Features:
     * Removed "underscore in URL" == "blank in pagename magic" - it made more
@@ -220,6 +221,15 @@
       need to use "from MoinMoin.config.multiconfig import DefaultConfig" now.
       You need to change this in your wikiconfig.py or farmconfig.py file.
       See MoinMoin/multiconfig.py for an alternative way if you can't do that.
+    * HINT: you need to change your url_prefix setting in 2 ways:
+      1. The setting is now called url_prefix_static (to make it more clear
+         that we mean the static stuff, not the wiki script url).
+      2. The strongly recommended (and default) value of it is '/moin_static160'
+         for moin version 1.6.0 (and will be ...161 for moin 1.6.1). We use a
+         very long cache lifetime for static stuff now, so it is required to
+         change the URL of static stuff when the static stuff changes (e.g. on
+         a version upgrade of moin) to avoid problems with stale cache content.
+         Your moin will be faster with lower load and traffic because of this.
 
 Version 1.5-current:
    * moin.fcg improved - if you use FastCGI, you must use the new file:
@@ -228,6 +238,9 @@
      * the count of created threads is limited now (default: 5), you can use 1
        to use non-threaded operation.
      * configurable socket.listen() backlog (default: 5)
+  * tuning:
+    * more efficient locking code on POSIX platforms, we do much less I/O there now
+    * removed most chmod calls in favour of a single os.umask call
   
 Version 1.5.4:
     HINT: read docs/README.migration.