# HG changeset patch # User Paul Boddie # Date 1383351586 -3600 # Node ID b8232447118ae973533bee57c595761962d63ce4 # Parent e03ec526eebcd9d837cb4d4d0ed081bdc26412b1 Added attachment file timestamping. diff -r e03ec526eebc -r b8232447118a patches/patch-moin-1.9-MoinMoin-packages.diff --- a/patches/patch-moin-1.9-MoinMoin-packages.diff Fri Nov 01 22:48:35 2013 +0100 +++ b/patches/patch-moin-1.9-MoinMoin-packages.diff Sat Nov 02 01:19:46 2013 +0100 @@ -1,7 +1,36 @@ diff -r 3131859d555c MoinMoin/packages.py --- a/MoinMoin/packages.py Tue Jul 30 17:58:46 2013 +0200 -+++ b/MoinMoin/packages.py Fri Nov 01 22:46:55 2013 +0100 -@@ -96,6 +96,10 @@ ++++ b/MoinMoin/packages.py Fri Nov 01 23:52:24 2013 +0100 +@@ -4,11 +4,13 @@ + + @copyright: 2005 MoinMoin:AlexanderSchremmer, + 2007-2010 MoinMoin:ReimarBauer ++ 2013 MoinMoin:PaulBoddie + @license: GNU GPL, see COPYING for details. + """ + + import os, re, sys + import zipfile ++import subprocess, time + + from MoinMoin import config, wikiutil, caching, user + from MoinMoin.Page import Page +@@ -48,12 +50,12 @@ + elog = eventlog.EventLog(self.request) + elog.add(self.request, eventtype, {'pagename': pagename}, 1, mtime_usecs) + +-def edit_logfile_append(self, pagename, pagefile, rev, action, logname='edit-log', comment=u'', author=u"Scripting Subsystem"): ++def edit_logfile_append(self, pagename, pagefile, rev, action, logname='edit-log', comment=u'', author=u"Scripting Subsystem", mtime=None): + glog = editlog.EditLog(self.request, uid_override=author) + pagelog = Page(self.request, pagename).getPagePath(logname, use_underlay=0, isfile=1) + llog = editlog.EditLog(self.request, filename=pagelog, + uid_override=author) +- mtime_usecs = wikiutil.timestamp2version(os.path.getmtime(pagefile)) ++ mtime_usecs = wikiutil.timestamp2version(mtime and int(mtime) or os.path.getmtime(pagefile)) + host = '::1' + extra = u'' + glog.add(self.request, mtime_usecs, rev, action, pagename, host, comment) +@@ -96,18 +98,24 @@ """ return (string.lower() in ('yes', 'true', '1')) @@ -12,7 +41,23 @@ class ScriptEngine: """ The script engine supplies the needed commands to execute the installation -@@ -118,7 +122,7 @@ + script. + """ + +- def _extractToFile(self, source, target): ++ def _extractToFile(self, source, target, mtime=None): + """ Extracts source and writes the contents into target. """ +- # TODO, add file dates ++ # TODO, add file dates using some kind of native Python library supporting fdutimensat or equivalent + target_file = open(target, "wb") + target_file.write(self.extract_file(source)) + target_file.close() ++ if mtime is not None: ++ subprocess.call(["touch", "-m", "-d", time.strftime("%Y-%m-%d %H:%M:%S +0000", time.gmtime(int(mtime))), target]) + + def __init__(self): + self.themename = None +@@ -118,7 +126,7 @@ self.msg = getattr(self, "msg", "") self.request = getattr(self, "request", None) @@ -21,16 +66,22 @@ """ Installs an attachment -@@ -133,7 +137,7 @@ - filename = wikiutil.taintfilename(filename) - zipname = wikiutil.taintfilename(zipname) - target = os.path.join(attachments, filename) -- page = PageEditor(self.request, pagename, do_editor_backup=0, uid_override=author) -+ page = PageEditor(self.request, pagename, do_editor_backup=0, uid_override=author, mtime=mtime and int(mtime)) +@@ -137,12 +145,12 @@ rev = page.current_rev() path = page.getPagePath(check_create=0) if not os.path.exists(target): -@@ -286,7 +290,7 @@ +- self._extractToFile(zipname, target) ++ self._extractToFile(zipname, target, mtime) + if os.path.exists(target): + filesys.chmod(target, 0666 & config.umask) + action = 'ATTNEW' + edit_logfile_append(self, pagename, path, rev, action, logname='edit-log', +- comment=u'%(filename)s' % {"filename": filename}, author=author) ++ comment=u'%(filename)s' % {"filename": filename}, author=author, mtime=mtime) + self.msg += u"%(filename)s attached \n" % {"filename": filename} + else: + self.msg += u"%(filename)s not attached \n" % {"filename": filename} +@@ -286,7 +294,7 @@ self.msg += package.msg @@ -39,7 +90,7 @@ """ Adds a revision to a page. @param filename: name of the file in this package -@@ -298,7 +302,7 @@ +@@ -298,7 +306,7 @@ _ = self.request.getText trivial = str2boolean(trivial) if self.request.user.may.write(pagename): @@ -48,7 +99,7 @@ try: page.saveText(self.extract_file(filename).decode("utf-8"), 0, trivial=trivial, comment=comment) except PageEditor.Unchanged: -@@ -555,6 +559,7 @@ +@@ -555,6 +563,7 @@ # Setup MoinMoin environment from MoinMoin.web.contexts import ScriptContext request = ScriptContext(url=request_url)