1.1 --- a/patches/patch-moin-1.9-MoinMoin-packages.diff Fri Nov 01 22:48:35 2013 +0100
1.2 +++ b/patches/patch-moin-1.9-MoinMoin-packages.diff Sat Nov 02 01:19:46 2013 +0100
1.3 @@ -1,7 +1,36 @@
1.4 diff -r 3131859d555c MoinMoin/packages.py
1.5 --- a/MoinMoin/packages.py Tue Jul 30 17:58:46 2013 +0200
1.6 -+++ b/MoinMoin/packages.py Fri Nov 01 22:46:55 2013 +0100
1.7 -@@ -96,6 +96,10 @@
1.8 ++++ b/MoinMoin/packages.py Fri Nov 01 23:52:24 2013 +0100
1.9 +@@ -4,11 +4,13 @@
1.10 +
1.11 + @copyright: 2005 MoinMoin:AlexanderSchremmer,
1.12 + 2007-2010 MoinMoin:ReimarBauer
1.13 ++ 2013 MoinMoin:PaulBoddie
1.14 + @license: GNU GPL, see COPYING for details.
1.15 + """
1.16 +
1.17 + import os, re, sys
1.18 + import zipfile
1.19 ++import subprocess, time
1.20 +
1.21 + from MoinMoin import config, wikiutil, caching, user
1.22 + from MoinMoin.Page import Page
1.23 +@@ -48,12 +50,12 @@
1.24 + elog = eventlog.EventLog(self.request)
1.25 + elog.add(self.request, eventtype, {'pagename': pagename}, 1, mtime_usecs)
1.26 +
1.27 +-def edit_logfile_append(self, pagename, pagefile, rev, action, logname='edit-log', comment=u'', author=u"Scripting Subsystem"):
1.28 ++def edit_logfile_append(self, pagename, pagefile, rev, action, logname='edit-log', comment=u'', author=u"Scripting Subsystem", mtime=None):
1.29 + glog = editlog.EditLog(self.request, uid_override=author)
1.30 + pagelog = Page(self.request, pagename).getPagePath(logname, use_underlay=0, isfile=1)
1.31 + llog = editlog.EditLog(self.request, filename=pagelog,
1.32 + uid_override=author)
1.33 +- mtime_usecs = wikiutil.timestamp2version(os.path.getmtime(pagefile))
1.34 ++ mtime_usecs = wikiutil.timestamp2version(mtime and int(mtime) or os.path.getmtime(pagefile))
1.35 + host = '::1'
1.36 + extra = u''
1.37 + glog.add(self.request, mtime_usecs, rev, action, pagename, host, comment)
1.38 +@@ -96,18 +98,24 @@
1.39 """
1.40 return (string.lower() in ('yes', 'true', '1'))
1.41
1.42 @@ -12,7 +41,23 @@
1.43 class ScriptEngine:
1.44 """
1.45 The script engine supplies the needed commands to execute the installation
1.46 -@@ -118,7 +122,7 @@
1.47 + script.
1.48 + """
1.49 +
1.50 +- def _extractToFile(self, source, target):
1.51 ++ def _extractToFile(self, source, target, mtime=None):
1.52 + """ Extracts source and writes the contents into target. """
1.53 +- # TODO, add file dates
1.54 ++ # TODO, add file dates using some kind of native Python library supporting fdutimensat or equivalent
1.55 + target_file = open(target, "wb")
1.56 + target_file.write(self.extract_file(source))
1.57 + target_file.close()
1.58 ++ if mtime is not None:
1.59 ++ subprocess.call(["touch", "-m", "-d", time.strftime("%Y-%m-%d %H:%M:%S +0000", time.gmtime(int(mtime))), target])
1.60 +
1.61 + def __init__(self):
1.62 + self.themename = None
1.63 +@@ -118,7 +126,7 @@
1.64 self.msg = getattr(self, "msg", "")
1.65 self.request = getattr(self, "request", None)
1.66
1.67 @@ -21,16 +66,22 @@
1.68 """
1.69 Installs an attachment
1.70
1.71 -@@ -133,7 +137,7 @@
1.72 - filename = wikiutil.taintfilename(filename)
1.73 - zipname = wikiutil.taintfilename(zipname)
1.74 - target = os.path.join(attachments, filename)
1.75 -- page = PageEditor(self.request, pagename, do_editor_backup=0, uid_override=author)
1.76 -+ page = PageEditor(self.request, pagename, do_editor_backup=0, uid_override=author, mtime=mtime and int(mtime))
1.77 +@@ -137,12 +145,12 @@
1.78 rev = page.current_rev()
1.79 path = page.getPagePath(check_create=0)
1.80 if not os.path.exists(target):
1.81 -@@ -286,7 +290,7 @@
1.82 +- self._extractToFile(zipname, target)
1.83 ++ self._extractToFile(zipname, target, mtime)
1.84 + if os.path.exists(target):
1.85 + filesys.chmod(target, 0666 & config.umask)
1.86 + action = 'ATTNEW'
1.87 + edit_logfile_append(self, pagename, path, rev, action, logname='edit-log',
1.88 +- comment=u'%(filename)s' % {"filename": filename}, author=author)
1.89 ++ comment=u'%(filename)s' % {"filename": filename}, author=author, mtime=mtime)
1.90 + self.msg += u"%(filename)s attached \n" % {"filename": filename}
1.91 + else:
1.92 + self.msg += u"%(filename)s not attached \n" % {"filename": filename}
1.93 +@@ -286,7 +294,7 @@
1.94
1.95 self.msg += package.msg
1.96
1.97 @@ -39,7 +90,7 @@
1.98 """ Adds a revision to a page.
1.99
1.100 @param filename: name of the file in this package
1.101 -@@ -298,7 +302,7 @@
1.102 +@@ -298,7 +306,7 @@
1.103 _ = self.request.getText
1.104 trivial = str2boolean(trivial)
1.105 if self.request.user.may.write(pagename):
1.106 @@ -48,7 +99,7 @@
1.107 try:
1.108 page.saveText(self.extract_file(filename).decode("utf-8"), 0, trivial=trivial, comment=comment)
1.109 except PageEditor.Unchanged:
1.110 -@@ -555,6 +559,7 @@
1.111 +@@ -555,6 +563,7 @@
1.112 # Setup MoinMoin environment
1.113 from MoinMoin.web.contexts import ScriptContext
1.114 request = ScriptContext(url=request_url)