changeset 1403:3bf3bc730b5d

merged Tech Nossomy's doc fixes
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Mon, 25 Jun 2012 12:03:12 +0200
parents 356390d3f4a4 (current diff) 29e980721a6b (diff)
children 83d04b38b8fa
files MoinMoin/_tests/test_sourcecode.py docs/devel/development.rst
diffstat 364 files changed, 231 insertions(+), 784 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Sun Jun 24 19:38:42 2012 +0200
+++ b/Makefile	Mon Jun 25 12:03:12 2012 +0200
@@ -8,6 +8,9 @@
 all:
 	python setup.py build
 
+test:
+	py.test --pep8 -rs
+
 dist: clean-devwiki
 	-rm MANIFEST
 	python setup.py sdist
@@ -23,9 +26,6 @@
 	wget -U MoinMoin/Makefile -O contrib/interwiki/intermap.txt "http://master19.moinmo.in/InterWikiMap?action=raw"
 	chmod 664 contrib/interwiki/intermap.txt
 
-check-tabs:
-	@python -c 'import tabnanny ; tabnanny.check("MoinMoin")'
-
 pylint:
 	@pylint --disable-msg=W0142,W0511,W0612,W0613,C0103,C0111,C0302,C0321,C0322 --disable-msg-cat=R MoinMoin
 
--- a/MoinMoin/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -19,4 +19,3 @@
 from MoinMoin.util.version import Version
 
 version = Version(2, 0, 0, 'a0')
-
--- a/MoinMoin/_template.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_template.py	Mon Jun 25 12:03:12 2012 +0200
@@ -16,4 +16,3 @@
 
 
 from __future__ import absolute_import, division
-
--- a/MoinMoin/_tests/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -82,5 +82,3 @@
         s.close()
     except socket.error as err:
         raise Exception("connecting to {0}:{1:d}, error: {2!s}".format(host, port, err))
-
-
--- a/MoinMoin/_tests/_test_template.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/_test_template.py	Mon Jun 25 12:03:12 2012 +0200
@@ -40,8 +40,8 @@
     can add a test by adding another line to this list
     """
     _tests = (
-        # description,  test,            expected
-        ('Line break',  '<<BR>>',        '<br>'),
+        # description, test, expected
+        ('Line break', '<<BR>>', '<br>'),
     )
 
     from MoinMoin._tests import wikiconfig
@@ -71,4 +71,3 @@
         module_tested.do_that()
         result = None
         return result
-
--- a/MoinMoin/_tests/ldap_testbase.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/ldap_testbase.py	Mon Jun 25 12:03:12 2012 +0200
@@ -258,4 +258,3 @@
 
 except ImportError:
     pass  # obviously pytest not in use
-
--- a/MoinMoin/_tests/ldap_testdata.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/ldap_testdata.py	Mon Jun 25 12:03:12 2012 +0200
@@ -116,4 +116,3 @@
 member: cn=Group A,ou=Groups,ou=testing,dc=example,dc=org
 objectClass: groupOfNames
 """
-
--- a/MoinMoin/_tests/test_error.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/test_error.py	Mon Jun 25 12:03:12 2012 +0200
@@ -73,4 +73,3 @@
         assert result == expected
 
 coverage_modules = ['MoinMoin.error']
-
--- a/MoinMoin/_tests/test_sourcecode.py	Sun Jun 24 19:38:42 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-# Copyright: 2006 by Armin Rigo (originally only testing for tab chars)
-# Copyright: 2007 adapted and extended (calling the PEP8 checker for most stuff) by MoinMoin:ThomasWaldmann.
-# License: MIT licensed
-
-"""
-Verify that the MoinMoin source files conform (mostly) to PEP8 coding style.
-
-Additionally, we check that the files have no crlf (Windows style) line endings.
-"""
-
-
-import re, time
-import pytest
-import pep8
-
-import py
-
-moindir = py.path.local(__file__).pypkgpath()
-
-EXCLUDE = set([
-    moindir/'static', # this is our dist static stuff
-    moindir/'_tests/wiki', # this is our test wiki
-    moindir/'util/md5crypt.py', # 3rd party, do not fix pep8 there
-])
-
-PEP8IGNORE = (
-    "E121 E122 E123 E124 E125 E126 E127 E128 "  # continuation line indentation
-    "E225 "  # missing whitespace around operator
-    "E241 "  # whitespace around comma (we have some "tabular" formatting in the tests)
-    "E261 "  # less than 2 blanks before inline comment
-    "E301 E302 "  # separate toplevel definitions with 2 empty lines, method defs inside class by 1 empty line
-    "E401 "  # imports on separate lines
-    "E501 "  # maximum line length (default 79 chars)
-    "E502 "  # bug in pep8.py: https://github.com/jcrocholl/pep8/issues/75
-    "W391 "  # trailing blank line(s) at EOF. But: We want one of them so that diff does not complain!
-).split()
-
-TRAILING_SPACES = 'nochange' # 'nochange' or 'fix'
-                             # use 'fix' with extreme caution and in a separate changeset!
-FIX_TS_RE = re.compile(r' +$', re.M) # 'fix' mode: everything matching the trailing space re will be removed
-
-try:
-    import xattr
-    if not hasattr(xattr, "xattr"): # there seem to be multiple modules with that name
-        raise ImportError
-    def mark_file_ok(path, mtime):
-        x = xattr.xattr(path)
-        try:
-            x.set('user.moin-pep8-tested-mtime', str(int(mtime)))
-        except IOError:
-            # probably not supported
-            global mark_file_ok
-            mark_file_ok = lambda path, mtime: None
-
-    def should_check_file(path, mtime):
-        x = xattr.xattr(path)
-        try:
-            mt = x.get('user.moin-pep8-tested-mtime')
-            mt = long(mt)
-            return mtime > mt
-        except IOError:
-            # probably not supported
-            global should_check_file
-            should_check_file = lambda path, mtime: True
-        return True
-except ImportError:
-    def mark_file_ok(path, mtime):
-        pass
-    def should_check_file(path, mtime):
-        return True
-
-RECENTLY = time.time() - 7 * 24*60*60 # we only check stuff touched recently.
-#RECENTLY = 0 # check everything!
-
-# After doing a fresh clone, this procedure is recommended:
-# 1. Run the tests once to see if everything is OK (as cloning updates the mtime,
-#    it will test every file).
-# 2. Before starting to make new changes, use "touch" to change all timestamps
-#    to a time before <RECENTLY>.
-# 3. Regularly run the tests, they will run much faster now.
-
-def pep8_error_count(path):
-    # process_options initializes some data structures and MUST be called before each Checker().check_all()
-    pep8.process_options(['pep8', '--ignore=%s' % ','.join(PEP8IGNORE), '--show-source', 'dummy_path'])
-    error_count = pep8.Checker(path).check_all()
-    return error_count
-
-def check_py_file(reldir, path, mtime):
-    if TRAILING_SPACES == 'fix':
-        f = file(path, 'rb')
-        data = f.read()
-        f.close()
-        fixed = FIX_TS_RE.sub('', data)
-
-        # Don't write files if there's no need for that,
-        # as altering timestamps can be annoying with some tools.
-        if fixed == data:
-            return
-
-        f = file(path, 'wb')
-        f.write(fixed)
-        f.close()
-    # Please read and follow PEP8 - rerun this test until it does not fail any more,
-    # any type of error is only reported ONCE (even if there are multiple).
-    error_count = pep8_error_count(path)
-    assert error_count == 0
-    mark_file_ok(path, mtime)
-
-def pytest_generate_tests(metafunc):
-    for pyfile in sorted(moindir.visit('*.py', lambda p: p not in EXCLUDE)):
-        if pyfile not in EXCLUDE:
-            relpath = moindir.bestrelpath(pyfile)
-            metafunc.addcall(id=relpath, funcargs={'path': pyfile})
-
-def test_sourcecode(path):
-    mtime = path.stat().mtime
-    if mtime < RECENTLY:
-        pytest.skip("source change not recent")
-    if not should_check_file(str(path), mtime):
-        pytest.skip("source marked as should not be checked")
-
-    check_py_file(str(moindir.bestrelpath(path)), str(path), mtime)
-
-
--- a/MoinMoin/_tests/test_test_environ.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/test_test_environ.py	Mon Jun 25 12:03:12 2012 +0200
@@ -52,4 +52,3 @@
     def test_config(self):
         assert isinstance(app.cfg, wikiconfig.Config)
         assert app.cfg.content_acl == CONTENT_ACL
-
--- a/MoinMoin/_tests/test_user.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/test_user.py	Mon Jun 25 12:03:12 2012 +0200
@@ -431,4 +431,3 @@
 
 
 coverage_modules = ['MoinMoin.user']
-
--- a/MoinMoin/_tests/test_wikiutil.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/test_wikiutil.py	Mon Jun 25 12:03:12 2012 +0200
@@ -31,12 +31,12 @@
 class TestAnchorNames(object):
     def test_anchor_name_encoding(self):
         tests = [
-            # text                    expected output
-            (u'\xf6\xf6ll\xdf\xdf',   'A.2BAPYA9g-ll.2BAN8A3w-'),
-            (u'level 2',              'level_2'),
-            (u'level_2',              'level_2'),
-            (u'',                     'A'),
-            (u'123',                  'A123'),
+            # text, expected output
+            (u'\xf6\xf6ll\xdf\xdf', 'A.2BAPYA9g-ll.2BAN8A3w-'),
+            (u'level 2', 'level_2'),
+            (u'level_2', 'level_2'),
+            (u'', 'A'),
+            (u'123', 'A123'),
             # make sure that a valid anchor is not modified:
             (u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789:_.-',
              u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789:_.-')
@@ -224,12 +224,12 @@
 
 def testfile_headers():
     test_headers = [
-                #test_file               #content_type
-                ('imagefile.gif',       'image/gif'),
-                ('testfile.txt',        'text/plain'),
-                ('pdffile.pdf',         'application/pdf'),
-                ('docfile.doc',         'application/msword'),
-                (None,                  'application/octet-stream')
+                #test_file, content_type
+                ('imagefile.gif', 'image/gif'),
+                ('testfile.txt', 'text/plain'),
+                ('pdffile.pdf', 'application/pdf'),
+                ('docfile.doc', 'application/msword'),
+                (None, 'application/octet-stream')
                 ]
 
     for test_file, content_type in test_headers:
@@ -243,4 +243,3 @@
     assert result == expected
 
 coverage_modules = ['MoinMoin.wikiutil']
-
--- a/MoinMoin/_tests/wiki/data/plugin/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/wiki/data/plugin/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -1,4 +1,3 @@
 """
 This file was added so as to make hg track the folders necessary for the tests.
 """
-
--- a/MoinMoin/_tests/wikiconfig.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/_tests/wikiconfig.py	Mon Jun 25 12:03:12 2012 +0200
@@ -25,4 +25,3 @@
     interwikiname = u'MoinTest'
     interwiki_map = dict(Self='http://localhost:8080/', MoinMoin='http://moinmo.in/')
     interwiki_map[interwikiname] = 'http://localhost:8080/'
-
--- a/MoinMoin/app.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/app.py	Mon Jun 25 12:03:12 2012 +0200
@@ -261,4 +261,3 @@
         # can happen if teardown_wiki() is called twice, e.g. by unit tests.
         pass
     return response
-
--- a/MoinMoin/apps/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 - admin Module for special stuff for wiki admins
 - serve Module for static file serving
 """
-
--- a/MoinMoin/apps/admin/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 from flask import Blueprint
 admin = Blueprint('admin', __name__, template_folder='templates')
 import MoinMoin.apps.admin.views
-
--- a/MoinMoin/apps/admin/_tests/test_admin.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/_tests/test_admin.py	Mon Jun 25 12:03:12 2012 +0200
@@ -36,4 +36,3 @@
 
     def test_itemsize(self):
         self._test_view_get(url_for('admin.itemsize'))
-
--- a/MoinMoin/apps/admin/templates/admin/highlighterhelp.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/highlighterhelp.html	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 <h1>{{ _("Available Highlighters") }}</h1>
 {{ utils.table(headings, rows) }}
 {% endblock %}
-
--- a/MoinMoin/apps/admin/templates/admin/index.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/index.html	Mon Jun 25 12:03:12 2012 +0200
@@ -20,4 +20,3 @@
     <li><a href="{{ url_for('admin.highlighterhelp') }}">{{ _("Available Highlighters") }}</a></li>
 </ul>
 {% endblock %}
-
--- a/MoinMoin/apps/admin/templates/admin/interwikihelp.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/interwikihelp.html	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 <h1>{{ _("Known InterWiki names") }}</h1>
 {{ utils.table(headings, rows) }}
 {% endblock %}
-
--- a/MoinMoin/apps/admin/templates/admin/itemsize.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/itemsize.html	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 <h1>{{ _("Item sizes (latest revision)") }}</h1>
 {{ utils.table(headings, rows) }}
 {% endblock %}
-
--- a/MoinMoin/apps/admin/templates/admin/sysitems_upgrade.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/sysitems_upgrade.html	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 </fieldset>
 </form>
 {% endblock %}
-
--- a/MoinMoin/apps/admin/templates/admin/userbrowser.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/userbrowser.html	Mon Jun 25 12:03:12 2012 +0200
@@ -32,4 +32,3 @@
     {% endfor %}
 </table>
 {% endblock %}
-
--- a/MoinMoin/apps/admin/templates/admin/wikiconfig.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/wikiconfig.html	Mon Jun 25 12:03:12 2012 +0200
@@ -33,4 +33,3 @@
 </tdbody>
 </table>
 {% endblock %}
-
--- a/MoinMoin/apps/admin/templates/admin/wikiconfighelp.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/templates/admin/wikiconfighelp.html	Mon Jun 25 12:03:12 2012 +0200
@@ -26,4 +26,3 @@
     </table>
 {% endfor %}
 {% endblock %}
-
--- a/MoinMoin/apps/admin/views.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/admin/views.py	Mon Jun 25 12:03:12 2012 +0200
@@ -233,5 +233,3 @@
                            title_name=_(u"Item Size"),
                            headings=headings,
                            rows=rows)
-
-
--- a/MoinMoin/apps/feed/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/feed/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -12,4 +12,3 @@
 from flask import Blueprint
 feed = Blueprint('feed', __name__)
 import MoinMoin.apps.feed.views
-
--- a/MoinMoin/apps/feed/_tests/test_feed.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/feed/_tests/test_feed.py	Mon Jun 25 12:03:12 2012 +0200
@@ -44,4 +44,3 @@
             assert rv.headers['Content-Type'] == 'application/atom+xml'
             assert rv.data.startswith('<?xml')
             assert "checking if the cache invalidation works" in rv.data
-
--- a/MoinMoin/apps/feed/views.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/feed/views.py	Mon Jun 25 12:03:12 2012 +0200
@@ -110,4 +110,3 @@
         if cid is not None:
             app.cache.set(cid, content)
     return Response(content, content_type='application/atom+xml')
-
--- a/MoinMoin/apps/frontend/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/frontend/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -12,4 +12,3 @@
 from flask import Blueprint
 frontend = Blueprint('frontend', __name__)
 import MoinMoin.apps.frontend.views
-
--- a/MoinMoin/apps/frontend/_tests/test_frontend.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/frontend/_tests/test_frontend.py	Mon Jun 25 12:03:12 2012 +0200
@@ -296,4 +296,3 @@
         if email is None:
             email = "user@example.org"
         user.create_user(name, password, email, is_encrypted=pwencoded)
-
--- a/MoinMoin/apps/frontend/views.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/frontend/views.py	Mon Jun 25 12:03:12 2012 +0200
@@ -1,3 +1,4 @@
+# Copyright: 2012 MoinMoin:CheerXiao
 # Copyright: 2003-2010 MoinMoin:ThomasWaldmann
 # Copyright: 2011 MoinMoin:AkashSinha
 # Copyright: 2011 MoinMoin:ReimarBauer
@@ -20,6 +21,8 @@
 from datetime import datetime
 from itertools import chain
 from collections import namedtuple
+from functools import wraps
+
 try:
     import json
 except ImportError:
@@ -263,6 +266,36 @@
     return html
 
 
+def presenter(view, add_trail=False, abort404=True):
+    """
+    Decorator to create new "presenter" views.
+
+    Presenter views handle GET requests to locations like
+    +{view}/+<rev>/<item_name> and +{view}/<item_name>, and always try to
+    look up the item before processing.
+
+    :param view: name of view
+    :param add_trail: whether to call flaskg.user.add_trail
+    :param abort404: whether to abort(404) for nonexistent items
+    """
+    def decorator(wrapped):
+        @frontend.route('/+{view}/+<rev>/<itemname:item_name>'.format(view=view))
+        @frontend.route('/+{view}/<itemname:item_name>'.format(view=view), defaults=dict(rev=CURRENT))
+        @wraps(wrapped)
+        def wrapper(item_name, rev):
+            if add_trail:
+                flaskg.user.add_trail(item_name)
+            try:
+                item = Item.create(item_name, rev_id=rev)
+            except AccessDenied:
+                abort(403)
+            if abort404 and isinstance(item, NonExistent):
+                abort(404, item_name)
+            return wrapped(item)
+        return wrapper
+    return decorator
+
+
 @frontend.route('/<itemname:item_name>', defaults=dict(rev=CURRENT), methods=['GET'])
 @frontend.route('/+show/+<rev>/<itemname:item_name>', methods=['GET'])
 def show_item(item_name, rev):
@@ -298,13 +331,8 @@
     return redirect(url_for_item(item_name))
 
 
-@frontend.route('/+dom/+<rev>/<itemname:item_name>')
-@frontend.route('/+dom/<itemname:item_name>', defaults=dict(rev=CURRENT))
-def show_dom(item_name, rev):
-    try:
-        item = Item.create(item_name, rev_id=rev)
-    except AccessDenied:
-        abort(403)
+@presenter('dom', abort404=False)
+def show_dom(item):
     if isinstance(item, NonExistent):
         status = 404
     else:
@@ -329,32 +357,17 @@
     return Response(content, 200, mimetype='text/plain')
 
 
-@frontend.route('/+highlight/+<rev>/<itemname:item_name>')
-@frontend.route('/+highlight/<itemname:item_name>', defaults=dict(rev=CURRENT))
-def highlight_item(item_name, rev):
-    try:
-        item = Item.create(item_name, rev_id=rev)
-    except AccessDenied:
-        abort(403)
-    if isinstance(item, NonExistent):
-        abort(404, item_name)
+@presenter('highlight')
+def highlight_item(item):
     return render_template('highlight.html',
                            item=item, item_name=item.name,
                            data_text=Markup(item._render_data_highlight()),
                           )
 
 
-@frontend.route('/+meta/<itemname:item_name>', defaults=dict(rev=CURRENT))
-@frontend.route('/+meta/+<rev>/<itemname:item_name>')
-def show_item_meta(item_name, rev):
-    flaskg.user.add_trail(item_name)
-    try:
-        item = Item.create(item_name, rev_id=rev)
-    except AccessDenied:
-        abort(403)
-    if isinstance(item, NonExistent):
-        abort(404, item_name)
-    show_revision = rev != CURRENT
+@presenter('meta', add_trail=True)
+def show_item_meta(item):
+    show_revision = request.view_args['rev'] != CURRENT
     show_navigation = False # TODO
     first_rev = None
     last_rev = None
@@ -396,23 +409,13 @@
                            data_rendered=Markup(item._render_data()),
                            )
 
-@frontend.route('/+get/+<rev>/<itemname:item_name>')
-@frontend.route('/+get/<itemname:item_name>', defaults=dict(rev=CURRENT))
-def get_item(item_name, rev):
-    try:
-        item = Item.create(item_name, rev_id=rev)
-    except AccessDenied:
-        abort(403)
+@presenter('get')
+def get_item(item):
     return item.do_get()
 
-@frontend.route('/+download/+<rev>/<itemname:item_name>')
-@frontend.route('/+download/<itemname:item_name>', defaults=dict(rev=CURRENT))
-def download_item(item_name, rev):
-    try:
-        item = Item.create(item_name, rev_id=rev)
-        mimetype = request.values.get("mimetype")
-    except AccessDenied:
-        abort(403)
+@presenter('download')
+def download_item(item):
+    mimetype = request.values.get("mimetype")
     return item.do_get(force_attachment=True, mimetype=mimetype)
 
 @frontend.route('/+convert/<itemname:item_name>')
@@ -1887,4 +1890,3 @@
 def page_not_found(e):
     return render_template('404.html',
                            item_name=e.description), 404
-
--- a/MoinMoin/apps/misc/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/misc/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 from flask import Blueprint
 misc = Blueprint('misc', __name__, template_folder='templates')
 import MoinMoin.apps.misc.views
-
--- a/MoinMoin/apps/misc/_tests/test_misc.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/misc/_tests/test_misc.py	Mon Jun 25 12:03:12 2012 +0200
@@ -29,4 +29,3 @@
             rv = c.get(url_for('misc.urls_names'))
             assert rv.status == '200 OK'
             assert rv.headers['Content-Type'] == 'text/plain; charset=utf-8'
-
--- a/MoinMoin/apps/misc/views.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/misc/views.py	Mon Jun 25 12:03:12 2012 +0200
@@ -69,4 +69,3 @@
     item_names = sorted([rev.meta[NAME] for rev in flaskg.storage.documents(wikiname=app.cfg.interwikiname)])
     content = render_template('misc/urls_names.txt', item_names=item_names)
     return Response(content, mimetype='text/plain')
-
--- a/MoinMoin/apps/serve/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/serve/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -13,4 +13,3 @@
 from flask import Blueprint
 serve = Blueprint('serve', __name__)
 import MoinMoin.apps.serve.views
-
--- a/MoinMoin/apps/serve/_tests/test_serve.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/serve/_tests/test_serve.py	Mon Jun 25 12:03:12 2012 +0200
@@ -20,4 +20,3 @@
             assert rv.status == '404 NOT FOUND'
             assert rv.headers['Content-Type'] == 'text/html'
             assert '<!DOCTYPE HTML' in rv.data
-
--- a/MoinMoin/apps/serve/views.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/apps/serve/views.py	Mon Jun 25 12:03:12 2012 +0200
@@ -36,4 +36,3 @@
         abort(404)
 
     return send_from_directory(base_path, filename)
-
--- a/MoinMoin/auth/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -447,4 +447,3 @@
                 userobj = None
     logging.debug("session started for user {0!r}".format(userobj))
     return userobj
-
--- a/MoinMoin/auth/_tests/test_auth.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/_tests/test_auth.py	Mon Jun 25 12:03:12 2012 +0200
@@ -81,4 +81,3 @@
     assert 'password=test_pass' in test_url
     assert 'stage=test_auth_name' in test_url
     assert 'login_submit=1' in test_url
-
--- a/MoinMoin/auth/_tests/test_http.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/_tests/test_http.py	Mon Jun 25 12:03:12 2012 +0200
@@ -41,4 +41,3 @@
         test_user, bool_val = httpauthmoin_obj.request(flaskg.user)
         assert not test_user.valid
         assert test_user.name == u'anonymous'
-
--- a/MoinMoin/auth/_tests/test_ldap_login.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/_tests/test_ldap_login.py	Mon Jun 25 12:03:12 2012 +0200
@@ -232,4 +232,3 @@
         u2 = handle_login(None, username='usera', password='usera')
         assert u2 is not None
         assert u2.valid
-
--- a/MoinMoin/auth/_tests/test_log.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/_tests/test_log.py	Mon Jun 25 12:03:12 2012 +0200
@@ -36,4 +36,3 @@
         assert test_user.name == u'anonymous'
         assert not test_user.valid
         assert bool_value
-
--- a/MoinMoin/auth/http.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/http.py	Mon Jun 25 12:03:12 2012 +0200
@@ -70,4 +70,3 @@
         else:
             logging.debug("returning {0!r}".format(user_obj))
             return user_obj, True
-
--- a/MoinMoin/auth/ldap_login.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/ldap_login.py	Mon Jun 25 12:03:12 2012 +0200
@@ -264,4 +264,3 @@
         except:
             logging.exception("caught an exception, traceback follows...")
             return ContinueLogin(user_obj)
-
--- a/MoinMoin/auth/log.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/log.py	Mon Jun 25 12:03:12 2012 +0200
@@ -35,4 +35,3 @@
     def logout(self, user_obj, **kw):
         self.log('logout', user_obj, kw)
         return user_obj, True
-
--- a/MoinMoin/auth/openidrp.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/openidrp.py	Mon Jun 25 12:03:12 2012 +0200
@@ -163,4 +163,3 @@
 
                 # returns a MultistageFormLogin
                 return MultistageFormLogin(form_html)
-
--- a/MoinMoin/auth/smb_mount.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/auth/smb_mount.py	Mon Jun 25 12:03:12 2012 +0200
@@ -94,4 +94,3 @@
         if user_obj and not user_obj.valid:
             self.do_smb(user_obj.name, None, False)
         return user_obj, True
-
--- a/MoinMoin/config/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/config/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 from MoinMoin.constants.contenttypes import *
 from MoinMoin.constants.keys import *
 from MoinMoin.constants.misc import *
-
--- a/MoinMoin/config/_tests/test_defaultconfig.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/config/_tests/test_defaultconfig.py	Mon Jun 25 12:03:12 2012 +0200
@@ -37,4 +37,3 @@
                 assert result == (pw_error is None)
 
 coverage_modules = ['MoinMoin.config.default']
-
--- a/MoinMoin/config/default.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/config/default.py	Mon Jun 25 12:03:12 2012 +0200
@@ -577,4 +577,3 @@
 
 _add_options_to_defconfig(options)
 _add_options_to_defconfig(options_no_group_name, False)
-
--- a/MoinMoin/conftest.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/conftest.py	Mon Jun 25 12:03:12 2012 +0200
@@ -127,4 +127,3 @@
         if coverage is not None:
             coverage_modules.update(getattr(self.obj, 'coverage_modules', []))
         return super(Module, self).run(*args, **kwargs)
-
--- a/MoinMoin/constants/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/constants/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 """
 MoinMoin - modules with constant definitions
 """
-
--- a/MoinMoin/constants/chartypes.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/constants/chartypes.py	Mon Jun 25 12:03:12 2012 +0200
@@ -6,6 +6,3 @@
 chars_digits = u"\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u00b2\u00b3\u00b9\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u0a66\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0c66\u0c67\u0c68\u0c69\u0c6a\u0c6b\u0c6c\u0c6d\u0c6e\u0c6f\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0d66\u0d67\u0d68\u0d69\u0d6a\u0d6b\u0d6c\u0d6d\u0d6e\u0d6f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1369\u136a\u136b\u136c\u136d\u136e\u136f\u1370\u1371\u17e0\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u1810\u1811\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819\u2070\u2074\u2075\u2076\u2077\u2078\u2079\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2474\u2475\u2476\u2477\u2478\u2479\u247a\u247b\u247c\u2488\u2489\u248a\u248b\u248c\u248d\u248e\u248f\u2490\u24ea\u24f5\u24f6\u24f7\u24f8\u24f9\u24fa\u24fb\u24fc\u24fd\u2776\u2777\u2778\u2779\u277a\u277b\u277c\u277d\u277e\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787\u2788\u278a\u278b\u278c\u278d\u278e\u278f\u2790\u2791\u2792\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19"
 
 chars_spaces = u"\u0009\u000a\u000b\u000c\u000d\u001c\u001d\u001e\u001f\u0020\u0085\u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000"
-
-
-
--- a/MoinMoin/constants/contenttypes.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/constants/contenttypes.py	Mon Jun 25 12:03:12 2012 +0200
@@ -64,4 +64,3 @@
         ('application/octet-stream', 'binary file'),
     ]),
 ]
-
--- a/MoinMoin/constants/keys.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/constants/keys.py	Mon Jun 25 12:03:12 2012 +0200
@@ -84,4 +84,3 @@
 # index names
 LATEST_REVS = 'latest_revs'
 ALL_REVS = 'all_revs'
-
--- a/MoinMoin/constants/misc.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/constants/misc.py	Mon Jun 25 12:03:12 2012 +0200
@@ -44,4 +44,3 @@
                'notes',
                'rtp', 'rtsp', 'rtcp',
               ]
-
--- a/MoinMoin/constants/rights.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/constants/rights.py	Mon Jun 25 12:03:12 2012 +0200
@@ -38,4 +38,3 @@
 
 # rights that control access to operations on contents
 ACL_RIGHTS_CONTENTS = [READ, WRITE, CREATE, ADMIN, DESTROY, ]
-
--- a/MoinMoin/constants/tools/chartypes_create.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/constants/tools/chartypes_create.py	Mon Jun 25 12:03:12 2012 +0200
@@ -43,4 +43,3 @@
 
 if __name__ == '__main__':
     main()
-
--- a/MoinMoin/converter/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -79,4 +79,3 @@
 
 default_registry = RegistryConverter()
 load_package_modules(__name__, __path__)
-
--- a/MoinMoin/converter/_args.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_args.py	Mon Jun 25 12:03:12 2012 +0200
@@ -65,4 +65,3 @@
             yield value
         for value in self.keyword.itervalues():
             yield value
-
--- a/MoinMoin/converter/_args_wiki.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_args_wiki.py	Mon Jun 25 12:03:12 2012 +0200
@@ -83,4 +83,3 @@
         ret.append(key + u'=' + value)
 
     return u' '.join(ret)
-
--- a/MoinMoin/converter/_table.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_table.py	Mon Jun 25 12:03:12 2012 +0200
@@ -38,4 +38,3 @@
             table_body.append(table_row)
         table.append(table_body)
         return table
-
--- a/MoinMoin/converter/_tests/test__args.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test__args.py	Mon Jun 25 12:03:12 2012 +0200
@@ -94,4 +94,3 @@
     assert l[1] == 'both'
     assert True in l
     assert False in l
-
--- a/MoinMoin/converter/_tests/test__args_wiki.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test__args_wiki.py	Mon Jun 25 12:03:12 2012 +0200
@@ -38,4 +38,3 @@
 
     s = unparse(Arguments(positional, keyword))
     assert s == wiki
-
--- a/MoinMoin/converter/_tests/test__wiki_macro.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test__wiki_macro.py	Mon Jun 25 12:03:12 2012 +0200
@@ -116,4 +116,3 @@
         result = self.conv.parser(name, args, text)
         if output is not None or result is not None:
             assert self.serialize(result) == output
-
--- a/MoinMoin/converter/_tests/test_creole_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_creole_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -261,4 +261,3 @@
     def do(self, input, output, args={}):
         out = self.conv(input, 'text/x.moin.creole;charset=utf-8', **args)
         assert self.serialize(out) == output
-
--- a/MoinMoin/converter/_tests/test_docbook_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_docbook_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -429,4 +429,3 @@
         ]
         for i in data:
             yield (self.do_nonamespace, ) + i
-
--- a/MoinMoin/converter/_tests/test_docbook_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_docbook_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -217,4 +217,3 @@
         ]
         for i in data:
             yield (self.do, ) + i
-
--- a/MoinMoin/converter/_tests/test_html_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_html_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -270,4 +270,3 @@
         ]
         for i in data:
             yield (self.do, ) + i
-
--- a/MoinMoin/converter/_tests/test_html_in_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_html_in_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -211,4 +211,3 @@
         ]
         for i in data:
             yield (self.do, ) + i
-
--- a/MoinMoin/converter/_tests/test_html_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_html_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -245,4 +245,3 @@
     def test_unknown(self):
         page = ET.XML("<page:unknown {0}/>".format(self.input_namespaces))
         pytest.raises(ElementException, self.conv.__call__, page)
-
--- a/MoinMoin/converter/_tests/test_include.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_include.py	Mon Jun 25 12:03:12 2012 +0200
@@ -129,4 +129,3 @@
         rendered = MoinWiki.create(u'page1')._render_data()
         assert '<p />' not in rendered
         assert '<p></p>' not in rendered
-
--- a/MoinMoin/converter/_tests/test_link.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_link.py	Mon Jun 25 12:03:12 2012 +0200
@@ -160,4 +160,3 @@
         assert sorted(links_result) == sorted(links_expected)
         assert sorted(transclusions_result) == sorted(transclusions_expected)
         assert sorted(external_result) == sorted(external_expected)
-
--- a/MoinMoin/converter/_tests/test_mediawiki_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_mediawiki_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -166,4 +166,3 @@
         assert self.serialize(out) == output
 
 coverage_modules = ['MoinMoin.converter.mediawiki_in']
-
--- a/MoinMoin/converter/_tests/test_moinwiki19_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_moinwiki19_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -37,4 +37,3 @@
         ]
         for i in data:
             yield (self.do, ) + i
-
--- a/MoinMoin/converter/_tests/test_moinwiki_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_moinwiki_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -317,4 +317,3 @@
             pytest.skip(skip)
         out = self.conv(input, 'text/x.moin.wiki;charset=utf-8', **args)
         assert self.serialize(out) == output
-
--- a/MoinMoin/converter/_tests/test_moinwiki_in_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_moinwiki_in_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -512,4 +512,3 @@
         out = self.conv_in(input, 'text/x.moin.wiki;charset=utf-8', **args)
         out = self.conv_out(self.handle_input(self.serialize(out)), **args)
         assert self.handle_output(out) == output
-
--- a/MoinMoin/converter/_tests/test_moinwiki_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_moinwiki_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -147,4 +147,3 @@
             yield (self.do, ) + i
 
 coverage_modules = ['MoinMoin.converter.moinwiki_out']
-
--- a/MoinMoin/converter/_tests/test_rst_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_rst_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -155,4 +155,3 @@
         assert self.serialize(out) == output
 
 coverage_modules = ['MoinMoin.converter.rst_in']
-
--- a/MoinMoin/converter/_tests/test_rst_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_rst_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -181,4 +181,3 @@
             yield (self.do, ) + i
 
 coverage_modules = ['MoinMoin.converter.rst_out']
-
--- a/MoinMoin/converter/_tests/test_smiley.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_tests/test_smiley.py	Mon Jun 25 12:03:12 2012 +0200
@@ -77,4 +77,3 @@
     result = tree.xpath(query)
     print 'query result:', result
     assert result
-
--- a/MoinMoin/converter/_util.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_util.py	Mon Jun 25 12:03:12 2012 +0200
@@ -48,4 +48,3 @@
     text = text.replace(u'\r\n', u'\n')
     lines = text.split(u'\n')
     return lines
-
--- a/MoinMoin/converter/_wiki_macro.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/_wiki_macro.py	Mon Jun 25 12:03:12 2012 +0200
@@ -169,4 +169,3 @@
             elem.append(moin_page.body(children=content))
 
         return elem
-
--- a/MoinMoin/converter/archive_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/archive_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -122,4 +122,3 @@
 default_registry.register(TarConverter._factory, Type('application/x-tar'), type_moin_document)
 default_registry.register(TarConverter._factory, Type('application/x-gtar'), type_moin_document)
 default_registry.register(ZipConverter._factory, Type('application/zip'), type_moin_document)
-
--- a/MoinMoin/converter/audio_video_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/audio_video_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -42,4 +42,3 @@
 default_registry.register(Converter._factory, Type('video/webm'), type_moin_document)
 default_registry.register(Converter._factory, Type('audio/ogg'), type_moin_document)
 default_registry.register(Converter._factory, Type('audio/wave'), type_moin_document)
-
--- a/MoinMoin/converter/creole_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/creole_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -706,4 +706,3 @@
 from MoinMoin.util.mime import Type, type_moin_document, type_moin_creole
 default_registry.register(Converter.factory, type_moin_creole, type_moin_document)
 default_registry.register(Converter.factory, Type('x-moin/format;name=creole'), type_moin_document)
-
--- a/MoinMoin/converter/docbook_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/docbook_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -1154,4 +1154,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, Type('application/docbook+xml'), type_moin_document)
-
--- a/MoinMoin/converter/docbook_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/docbook_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -516,4 +516,3 @@
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, type_moin_document,
     Type('application/docbook+xml'))
-
--- a/MoinMoin/converter/everything.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/everything.py	Mon Jun 25 12:03:12 2012 +0200
@@ -36,4 +36,3 @@
                           default_registry.PRIORITY_MIDDLE + 3)
 default_registry.register(Converter._factory, Type(type=None, subtype=None), type_moin_document,
                           default_registry.PRIORITY_MIDDLE + 3)
-
--- a/MoinMoin/converter/highlight.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/highlight.py	Mon Jun 25 12:03:12 2012 +0200
@@ -57,4 +57,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, type_moin_document, type_moin_document)
-
--- a/MoinMoin/converter/html_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/html_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -559,4 +559,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, Type('text/html'), type_moin_document)
-
--- a/MoinMoin/converter/html_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/html_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -736,4 +736,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(ConverterPage._factory, type_moin_document, Type('application/x-xhtml-moin-page'))
-
--- a/MoinMoin/converter/image_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/image_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -40,4 +40,3 @@
 default_registry.register(Converter._factory, Type('image/png'), type_moin_document)
 default_registry.register(Converter._factory, Type('image/jpeg'), type_moin_document)
 default_registry.register(Converter._factory, Type('image/gif'), type_moin_document)
-
--- a/MoinMoin/converter/include.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/include.py	Mon Jun 25 12:03:12 2012 +0200
@@ -349,4 +349,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, type_moin_document, type_moin_document)
-
--- a/MoinMoin/converter/link.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/link.py	Mon Jun 25 12:03:12 2012 +0200
@@ -267,4 +267,3 @@
 from . import default_registry
 default_registry.register(ConverterExternOutput._factory, type_moin_document, type_moin_document)
 default_registry.register(ConverterItemRefs._factory, type_moin_document, type_moin_document)
-
--- a/MoinMoin/converter/macro.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/macro.py	Mon Jun 25 12:03:12 2012 +0200
@@ -117,4 +117,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, type_moin_document, type_moin_document)
-
--- a/MoinMoin/converter/mediawiki_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/mediawiki_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -814,7 +814,7 @@
     class Mediawiki_preprocessor(object):
 
         class Preprocessor_tag(object):
-            def __init__(self, name='', text='', tag='',  status=True):
+            def __init__(self, name='', text='', tag='', status=True):
                 self.tag_name = name
                 self.tag = tag
                 self.text = [text]
@@ -1005,4 +1005,3 @@
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter.factory, Type('x-moin/format;name=mediawiki'), type_moin_document)
 default_registry.register(Converter.factory, Type('text/x-mediawiki'), type_moin_document)
-
--- a/MoinMoin/converter/moinwiki19_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/moinwiki19_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -162,5 +162,3 @@
 from MoinMoin.util.mime import Type, type_moin_document, type_moin_wiki
 default_registry.register(ConverterFormat19.factory, Type('text/x.moin.wiki;format=1.9'), type_moin_document)
 default_registry.register(ConverterFormat19.factory, Type('x-moin/format;name=wiki;format=1.9'), type_moin_document)
-
-
--- a/MoinMoin/converter/moinwiki_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/moinwiki_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -1137,5 +1137,3 @@
 from MoinMoin.util.mime import Type, type_moin_document, type_moin_wiki
 default_registry.register(Converter.factory, type_moin_wiki, type_moin_document)
 default_registry.register(Converter.factory, Type('x-moin/format;name=wiki'), type_moin_document)
-
-
--- a/MoinMoin/converter/moinwiki_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/moinwiki_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -518,4 +518,3 @@
 from MoinMoin.util.mime import Type, type_moin_document, type_moin_wiki
 default_registry.register(Converter.factory, type_moin_document, type_moin_wiki)
 default_registry.register(Converter.factory, type_moin_document, Type('x-moin/format;name=wiki'))
-
--- a/MoinMoin/converter/nonexistent_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/nonexistent_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -34,4 +34,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, Type('application/x-nonexistent'), type_moin_document)
-
--- a/MoinMoin/converter/opendocument_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/opendocument_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -70,4 +70,3 @@
 
 for t in openoffice_types:
     default_registry.register(OpenOfficeIndexingConverter._factory, Type(t), type_text_plain)
-
--- a/MoinMoin/converter/pdf_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/pdf_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -67,4 +67,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_text_plain
 default_registry.register(PDFIndexingConverter._factory, Type('application/pdf'), type_text_plain)
-
--- a/MoinMoin/converter/pygments_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/pygments_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -137,4 +137,3 @@
                 blockcode.append(line.expandtabs())
             body = moin_page.body(children=(blockcode, ))
             return moin_page.page(children=(body, ))
-
--- a/MoinMoin/converter/rst_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/rst_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -783,4 +783,3 @@
                           Type('text/x-rst'), type_moin_document)
 default_registry.register(Converter.factory,
                           Type('x-moin/format;name=rst'), type_moin_document)
-
--- a/MoinMoin/converter/rst_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/rst_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -778,4 +778,3 @@
 default_registry.register(Converter.factory,
                           type_moin_document,
                           Type('x-moin/format;name=rst'))
-
--- a/MoinMoin/converter/smiley.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/smiley.py	Mon Jun 25 12:03:12 2012 +0200
@@ -139,4 +139,3 @@
 from . import default_registry
 from MoinMoin.util.mime import type_moin_document
 default_registry.register(Converter._factory, type_moin_document, type_moin_document)
-
--- a/MoinMoin/converter/text_csv_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/text_csv_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -45,4 +45,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, Type('text/csv'), type_moin_document)
-
--- a/MoinMoin/converter/text_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/text_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -44,4 +44,3 @@
 from MoinMoin.util.mime import Type, type_moin_document
 default_registry.register(Converter._factory, Type(type='text'), type_moin_document,
                           default_registry.PRIORITY_MIDDLE + 2)
-
--- a/MoinMoin/converter/text_out.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/text_out.py	Mon Jun 25 12:03:12 2012 +0200
@@ -30,4 +30,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_moin_document, type_text_plain
 default_registry.register(Converter.factory, type_moin_document, type_text_plain)
-
--- a/MoinMoin/converter/xml_in.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/converter/xml_in.py	Mon Jun 25 12:03:12 2012 +0200
@@ -40,4 +40,3 @@
 from . import default_registry
 from MoinMoin.util.mime import Type, type_text_plain
 default_registry.register(XMLIndexingConverter._factory, Type('text/xml'), type_text_plain)
-
--- a/MoinMoin/datastruct/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -16,4 +16,3 @@
 
 from MoinMoin.datastruct.backends import GroupDoesNotExistError
 from MoinMoin.datastruct.backends import DictDoesNotExistError
-
--- a/MoinMoin/datastruct/backends/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -330,4 +330,3 @@
             return self[key]
         except DictDoesNotExistError:
             return default
-
--- a/MoinMoin/datastruct/backends/_tests/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -183,4 +183,3 @@
                 assert u'SomeNotExistingKey' not in test_dict
                 assert test_dict.get(u'SomeNotExistingKey') is None
                 assert test_dict.get(u'SomeNotExistingKey', {}) == {}
-
--- a/MoinMoin/datastruct/backends/_tests/test_composite_dicts.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/test_composite_dicts.py	Mon Jun 25 12:03:12 2012 +0200
@@ -31,4 +31,3 @@
 
 
 coverage_modules = ['MoinMoin.datastruct.backends.composite_dicts']
-
--- a/MoinMoin/datastruct/backends/_tests/test_composite_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/test_composite_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -86,4 +86,3 @@
 
 
 coverage_modules = ['MoinMoin.datastruct.backends.composite_groups']
-
--- a/MoinMoin/datastruct/backends/_tests/test_config_dicts.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/test_config_dicts.py	Mon Jun 25 12:03:12 2012 +0200
@@ -27,4 +27,3 @@
             assert result in expected
 
 coverage_modules = ['MoinMoin.datastruct.backends.config_dicts']
-
--- a/MoinMoin/datastruct/backends/_tests/test_config_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/test_config_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -21,4 +21,3 @@
 
 
 coverage_modules = ['MoinMoin.datastruct.backends.config_groups']
-
--- a/MoinMoin/datastruct/backends/_tests/test_lazy_config_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/test_lazy_config_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -55,4 +55,3 @@
 
 
 coverage_modules = ['MoinMoin.datastruct.backends.config_lazy_groups']
-
--- a/MoinMoin/datastruct/backends/_tests/test_wiki_dicts.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/test_wiki_dicts.py	Mon Jun 25 12:03:12 2012 +0200
@@ -41,4 +41,3 @@
         assert result == expected
 
 coverage_modules = ['MoinMoin.datastruct.backends.wiki_dicts']
-
--- a/MoinMoin/datastruct/backends/_tests/test_wiki_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/_tests/test_wiki_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -107,4 +107,3 @@
         assert has_rights_after, 'AnotherUser must have read rights because after appenditem he is member of NewGroup'
 
 coverage_modules = ['MoinMoin.datastruct.backends.wiki_groups']
-
--- a/MoinMoin/datastruct/backends/composite_dicts.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/composite_dicts.py	Mon Jun 25 12:03:12 2012 +0200
@@ -44,4 +44,3 @@
 
     def __repr__(self):
         return "<{0} backends={1}>".format(self.__class__, self._backends)
-
--- a/MoinMoin/datastruct/backends/composite_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/composite_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -67,4 +67,3 @@
 
     def __repr__(self):
         return "<{0} backends={1}>".format(self.__class__, self._backends)
-
--- a/MoinMoin/datastruct/backends/config_dicts.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/config_dicts.py	Mon Jun 25 12:03:12 2012 +0200
@@ -36,4 +36,3 @@
             return self._dicts[dict_name]
         except KeyError:
             raise DictDoesNotExistError(dict_name)
-
--- a/MoinMoin/datastruct/backends/config_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/config_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -41,4 +41,3 @@
             return self._groups[group_name]
         except KeyError:
             raise GroupDoesNotExistError(group_name)
-
--- a/MoinMoin/datastruct/backends/config_lazy_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/config_lazy_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -41,4 +41,3 @@
 
     def _group_has_member(self, group_name, member):
         return group_name in self and member in self._groups[group_name]
-
--- a/MoinMoin/datastruct/backends/wiki_dicts.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/wiki_dicts.py	Mon Jun 25 12:03:12 2012 +0200
@@ -45,4 +45,3 @@
         rev = item.get_revision(CURRENT)
         somedict = rev.meta.get(SOMEDICT, {})
         return somedict
-
--- a/MoinMoin/datastruct/backends/wiki_groups.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/datastruct/backends/wiki_groups.py	Mon Jun 25 12:03:12 2012 +0200
@@ -53,4 +53,3 @@
         rev = item[CURRENT]
         usergroup = rev.meta.get(USERGROUP, [])
         return usergroup
-
--- a/MoinMoin/error.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/error.py	Mon Jun 25 12:03:12 2012 +0200
@@ -105,4 +105,3 @@
 
 class InternalError(FatalError):
     """ Raise when internal fatal error is found """
-
--- a/MoinMoin/i18n/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/i18n/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -66,4 +66,3 @@
     u = getattr(flaskg, 'user', None)
     if u and u.timezone is not None:
         return u.timezone
-
--- a/MoinMoin/i18n/_tests/test_i18n.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/i18n/_tests/test_i18n.py	Mon Jun 25 12:03:12 2012 +0200
@@ -31,4 +31,3 @@
     assert result1 == 'text1'
     result2 = N_('text1', 'text2', 2)
     assert result2 == 'text2'
-
--- a/MoinMoin/items/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/items/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -1,3 +1,4 @@
+# Copyright: 2012 MoinMoin:CheerXiao
 # Copyright: 2009 MoinMoin:ThomasWaldmann
 # Copyright: 2009-2011 MoinMoin:ReimarBauer
 # Copyright: 2009 MoinMoin:ChristopherDenter
@@ -69,7 +70,7 @@
 from MoinMoin.util.interwiki import url_for_item
 from MoinMoin.storage.error import NoSuchItemError, NoSuchRevisionError, StorageError
 from MoinMoin.config import NAME, NAME_OLD, NAME_EXACT, WIKINAME, MTIME, REVERTED_TO, ACL, \
-                            IS_SYSITEM, SYSITEM_VERSION,  USERGROUP, SOMEDICT, \
+                            IS_SYSITEM, SYSITEM_VERSION, USERGROUP, SOMEDICT, \
                             CONTENTTYPE, SIZE, LANGUAGE, ITEMLINKS, ITEMTRANSCLUSIONS, \
                             TAGS, ACTION, ADDRESS, HOSTNAME, USERID, EXTRA, COMMENT, \
                             HASH_ALGORITHM, CONTENTTYPE_GROUPS, ITEMID, REVID, DATAID, \
@@ -644,7 +645,6 @@
         if not flaskg.user.may.create(self.name):
             abort(403)
 
-        # XXX think about and add item template support
         return render_template('modify_show_type_selection.html',
                                item_name=self.name,
                                contenttype_groups=CONTENTTYPE_GROUPS,
@@ -693,35 +693,58 @@
         revs = flaskg.storage.search(query, sortedby=NAME_EXACT, limit=None)
         return [rev.meta[NAME] for rev in revs]
 
-    def do_modify(self, contenttype, template_name):
-        # XXX think about and add item template support
-        #if template_name is None and isinstance(self.rev, DummyRev):
-        #    return self._do_modify_show_templates()
-        from MoinMoin.apps.frontend.views import CommentForm
-        class ModifyForm(CommentForm):
-            meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON())
-            data_file = FileStorage.using(optional=True, label=L_('Upload file:'))
+    from MoinMoin.apps.frontend.views import CommentForm
+    class ModifyForm(CommentForm):
+        """Base class for ModifyForm of Binary's subclasses."""
+        meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON())
+        data_file = FileStorage.using(optional=True, label=L_('Upload file:'))
 
-        if request.method == 'GET':
-            form = ModifyForm.from_defaults()
-            TextCha(form).amend_form()
-            form['meta_text'] = self.meta_dict_to_text(self.prepare_meta_for_modify(self.meta))
-        elif request.method == 'POST':
-            form = ModifyForm.from_flat(request.form.items() + request.files.items())
-            TextCha(form).amend_form()
-            if form.validate():
-                try:
-                    self.modify() # XXX
-                except AccessDenied:
-                    abort(403)
-                else:
-                    return redirect(url_for_item(self.name))
+        def _load(self):
+            item = self.item
+            self['meta_text'] = item.meta_dict_to_text(item.prepare_meta_for_modify(item.meta))
+
+        extra_template_args = {}
+
+        @classmethod
+        def from_item(cls, item):
+            method = request.method
+            if method == 'GET':
+                form = cls.from_defaults()
+                TextCha(form).amend_form()
+                form.item = item
+                form._load()
+            elif method == 'POST':
+                form = cls.from_flat(request.form.items() + request.files.items())
+                form.item = item
+                TextCha(form).amend_form()
+                form.validate()
+            else:
+                raise ValueError("Request method '%s' not supported" % method)
+            return form
+
+    def do_modify(self, contenttype, template_name):
+        method = request.method
+        if method == 'GET' and template_name is None and isinstance(self.rev, DummyRev):
+            return self._do_modify_show_templates()
+
+        if template_name:
+            item = Item.create(template_name)
+
+        form = self.ModifyForm.from_item(self)
+        if method == 'POST' and form.validate():
+            try:
+                self.modify() # XXX
+            except AccessDenied:
+                abort(403)
+            else:
+                return redirect(url_for_item(self.name))
         return render_template(self.template,
                                item_name=self.name,
                                rows_meta=str(ROWS_META), cols=str(COLS),
                                help=self.modify_help,
                                form=form,
                                search_form=None,
+                               **form.extra_template_args
                               )
 
     def _render_data_diff(self, oldrev, newrev):
@@ -1106,6 +1129,16 @@
     """ Base class for text/* """
     template = "modify_text.html"
 
+    class ModifyForm(Binary.ModifyForm):
+        data_text = String.using(strip=False, optional=True).with_properties(placeholder=L_("Type your text here"))
+
+        def _load(self):
+            super(Text.ModifyForm, self)._load()
+            item = self.item
+            self['data_text'] = item.data_storage_to_internal(item.data)
+
+        extra_template_args = {'rows_data': str(ROWS_DATA)}
+
     # text/plain mandates crlf - but in memory, we want lf only
     def data_internal_to_form(self, text):
         """ convert data from memory format to form format """
@@ -1164,45 +1197,6 @@
         doc = html_conv(doc)
         return conv_serialize(doc, {html.namespace: ''})
 
-    def do_modify(self, contenttype, template_name):
-        # XXX think about and add item template support
-        #if template_name is None and isinstance(self.rev, DummyRev):
-        #    return self._do_modify_show_templates()
-        from MoinMoin.apps.frontend.views import CommentForm
-        class ModifyForm(CommentForm):
-            meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON())
-            data_text = String.using(strip=False, optional=True).with_properties(placeholder=L_("Type your text here"))
-            data_file = FileStorage.using(optional=True, label=L_('Upload file:'))
-
-        if request.method == 'GET':
-            if template_name is None and isinstance(self.rev, DummyRev):
-                return self._do_modify_show_templates()
-            form = ModifyForm.from_defaults()
-            TextCha(form).amend_form()
-            if template_name:
-                item = Item.create(template_name)
-                form['data_text'] = self.data_storage_to_internal(item.data)
-            else:
-                form['data_text'] = self.data_storage_to_internal(self.data)
-            form['meta_text'] = self.meta_dict_to_text(self.prepare_meta_for_modify(self.meta))
-        elif request.method == 'POST':
-            form = ModifyForm.from_flat(request.form.items() + request.files.items())
-            TextCha(form).amend_form()
-            if form.validate():
-                try:
-                    self.modify() # XXX
-                except AccessDenied:
-                    abort(403)
-                else:
-                    return redirect(url_for_item(self.name))
-        return render_template(self.template,
-                               item_name=self.name,
-                               rows_data=str(ROWS_DATA), rows_meta=str(ROWS_META), cols=str(COLS),
-                               help=self.modify_help,
-                               form=form,
-                               search_form=None,
-                              )
-
 item_registry.register(Text._factory, Type('text/*'))
 
 
@@ -1300,7 +1294,39 @@
 item_registry.register(DocBook._factory, Type('application/docbook+xml'))
 
 
-class TWikiDraw(TarMixin, Image):
+class Draw(TarMixin, Image):
+    """
+    Base class for *Draw that use special Java/Javascript applets to modify and store data in a tar file.
+    """
+    class ModifyForm(Binary.ModifyForm):
+        pass
+
+    def do_modify(self, contenttype, template_name):
+        # XXX think about and add item template support
+        #if template_name is None and isinstance(self.rev, DummyRev):
+        #    return self._do_modify_show_templates()
+        form = self.ModifyForm.from_item(self)
+        # XXX we don't validate the form as the POST comes from *Draw applets
+        # XXX as the "saving" POSTs come from *Draw (not the form), editing meta_text doesn't work
+        if request.method == 'POST':
+            try:
+                self.modify() # XXX
+            except AccessDenied:
+                abort(403)
+            else:
+                # *Draw Applets POSTs more than once, redirecting would break them
+                return "OK"
+        return render_template(self.template,
+                               item_name=self.name,
+                               rows_meta=str(ROWS_META), cols=str(COLS),
+                               help=self.modify_help,
+                               form=form,
+                               search_form=None,
+                               **form.extra_template_args
+                              )
+
+
+class TWikiDraw(Draw):
     """
     drawings by TWikiDraw applet. It creates three files which are stored as tar file.
     """
@@ -1331,38 +1357,6 @@
         self.put_member('drawing' + ext, filecontent, content_length,
                         expected_members=set(['drawing.draw', 'drawing.map', 'drawing.png']))
 
-    def do_modify(self, contenttype, template_name):
-        # XXX think about and add item template support
-        #if template_name is None and isinstance(self.rev, DummyRev):
-        #    return self._do_modify_show_templates()
-        from MoinMoin.apps.frontend.views import CommentForm
-        class ModifyForm(CommentForm):
-            # XXX as the "saving" POSTs come from TWikiDraw (not the form), editing meta_text doesn't work
-            meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON())
-            data_file = FileStorage.using(optional=True, label=L_('Upload file:'))
-
-        if request.method == 'GET':
-            form = ModifyForm.from_defaults()
-            TextCha(form).amend_form()
-            # XXX currently this is rather pointless, as the form does not get POSTed:
-            form['meta_text'] = self.meta_dict_to_text(self.prepare_meta_for_modify(self.meta))
-        elif request.method == 'POST':
-            # this POST comes directly from TWikiDraw (not from Browser), thus no validation
-            try:
-                self.modify() # XXX
-            except AccessDenied:
-                abort(403)
-            else:
-                # TWikiDraw POSTs more than once, redirecting would break them
-                return "OK"
-        return render_template(self.template,
-                               item_name=self.name,
-                               rows_meta=str(ROWS_META), cols=str(COLS),
-                               help=self.modify_help,
-                               form=form,
-                               search_form=None,
-                              )
-
     def _render_data(self):
         # TODO: this could be a converter -> dom, then transcluding this kind
         # of items and also rendering them with the code in base class could work
@@ -1393,13 +1387,22 @@
 item_registry.register(TWikiDraw._factory, Type('application/x-twikidraw'))
 
 
-class AnyWikiDraw(TarMixin, Image):
+class AnyWikiDraw(Draw):
     """
     drawings by AnyWikiDraw applet. It creates three files which are stored as tar file.
     """
     modify_help = ""
     template = "modify_anywikidraw.html"
 
+    class ModifyForm(Draw.ModifyForm):
+        @property
+        def extra_template_args(self):
+            try:
+                drawing_exists = 'drawing.svg' in self.item.list_members()
+            except tarfile.TarError: # item doesn't exist yet
+                drawing_exists = False
+            return {'drawing_exists': drawing_exists}
+
     def modify(self):
         # called from modify UI/POST
         file_upload = request.files.get('filepath')
@@ -1422,43 +1425,6 @@
         self.put_member('drawing' + ext, filecontent, content_length,
                         expected_members=set(['drawing.svg', 'drawing.map', 'drawing.png']))
 
-    def do_modify(self, contenttype, template_name):
-        # XXX think about and add item template support
-        #if template_name is None and isinstance(self.rev, DummyRev):
-        #    return self._do_modify_show_templates()
-        from MoinMoin.apps.frontend.views import CommentForm
-        class ModifyForm(CommentForm):
-            # XXX as the "saving" POSTs come from AnyWikiDraw (not the form), editing meta_text doesn't work
-            meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON())
-            data_file = FileStorage.using(optional=True, label=L_('Upload file:'))
-
-        if request.method == 'GET':
-            form = ModifyForm.from_defaults()
-            TextCha(form).amend_form()
-            # XXX currently this is rather pointless, as the form does not get POSTed:
-            form['meta_text'] = self.meta_dict_to_text(self.prepare_meta_for_modify(self.meta))
-        elif request.method == 'POST':
-            # this POST comes directly from AnyWikiDraw (not from Browser), thus no validation
-            try:
-                self.modify() # XXX
-            except AccessDenied:
-                abort(403)
-            else:
-                # AnyWikiDraw POSTs more than once, redirecting would break them
-                return "OK"
-        try:
-            drawing_exists = 'drawing.svg' in self.list_members()
-        except:
-            drawing_exists = False
-        return render_template(self.template,
-                               item_name=self.name,
-                               rows_meta=str(ROWS_META), cols=str(COLS),
-                               help=self.modify_help,
-                               drawing_exists=drawing_exists,
-                               form=form,
-                               search_form=None,
-                              )
-
     def _render_data(self):
         # TODO: this could be a converter -> dom, then transcluding this kind
         # of items and also rendering them with the code in base class could work
@@ -1490,7 +1456,7 @@
 item_registry.register(AnyWikiDraw._factory, Type('application/x-anywikidraw'))
 
 
-class SvgDraw(TarMixin, Image):
+class SvgDraw(Draw):
     """ drawings by svg-edit. It creates two files (svg, png) which are stored as tar file. """
     modify_help = ""
     template = "modify_svg-edit.html"
@@ -1509,38 +1475,6 @@
         self.put_member("drawing.png", png_content, content_length,
                         expected_members=set(['drawing.svg', 'drawing.png']))
 
-    def do_modify(self, contenttype, template_name):
-        # XXX think about and add item template support
-        #if template_name is None and isinstance(self.rev, DummyRev):
-        #    return self._do_modify_show_templates()
-        from MoinMoin.apps.frontend.views import CommentForm
-        class ModifyForm(CommentForm):
-            # XXX as the "saving" POSTs come from SvgDraw (not the form), editing meta_text doesn't work
-            meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON())
-            data_file = FileStorage.using(optional=True, label=L_('Upload file:'))
-
-        if request.method == 'GET':
-            form = ModifyForm.from_defaults()
-            TextCha(form).amend_form()
-            # XXX currently this is rather pointless, as the form does not get POSTed:
-            form['meta_text'] = self.meta_dict_to_text(self.prepare_meta_for_modify(self.meta))
-        elif request.method == 'POST':
-            # this POST comes directly from SvgDraw (not from Browser), thus no validation
-            try:
-                self.modify() # XXX
-            except AccessDenied:
-                abort(403)
-            else:
-                # SvgDraw POSTs more than once, redirecting would break them
-                return "OK"
-        return render_template(self.template,
-                               item_name=self.name,
-                               rows_meta=str(ROWS_META), cols=str(COLS),
-                               help=self.modify_help,
-                               form=form,
-                               search_form=None,
-                              )
-
     def _render_data(self):
         # TODO: this could be a converter -> dom, then transcluding this kind
         # of items and also rendering them with the code in base class could work
@@ -1550,4 +1484,3 @@
         return Markup('<img src="{0}" alt="{1}" />'.format(png_url, drawing_url))
 
 item_registry.register(SvgDraw._factory, Type('application/x-svgdraw'))
-
--- a/MoinMoin/items/_tests/test_Item.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/items/_tests/test_Item.py	Mon Jun 25 12:03:12 2012 +0200
@@ -519,4 +519,3 @@
         assert item2.data == ''
 
 coverage_modules = ['MoinMoin.items']
-
--- a/MoinMoin/log.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/log.py	Mon Jun 25 12:03:12 2012 +0200
@@ -154,4 +154,3 @@
         if isinstance(levelnumber, int): # that list has also the reverse mapping...
             setattr(logger, levelname, levelnumber)
     return logger
-
--- a/MoinMoin/macro/Anchor.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/Anchor.py	Mon Jun 25 12:03:12 2012 +0200
@@ -16,4 +16,3 @@
 
         anchor = arguments[0]
         return moin_page.span(attrib={moin_page.id: anchor})
-
--- a/MoinMoin/macro/Date.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/Date.py	Mon Jun 25 12:03:12 2012 +0200
@@ -65,4 +65,3 @@
             stamp = arguments[0]
             tm = self.parse_time(stamp)
         return format_date(datetime.utcfromtimestamp(tm))
-
--- a/MoinMoin/macro/DateTime.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/DateTime.py	Mon Jun 25 12:03:12 2012 +0200
@@ -22,4 +22,3 @@
             stamp = arguments[0]
             tm = self.parse_time(stamp)
         return format_datetime(datetime.utcfromtimestamp(tm))
-
--- a/MoinMoin/macro/GetText.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/GetText.py	Mon Jun 25 12:03:12 2012 +0200
@@ -21,4 +21,3 @@
         translation = ' '.join(arguments.positional)
         translation = _(translation)
         return translation
-
--- a/MoinMoin/macro/GetVal.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/GetVal.py	Mon Jun 25 12:03:12 2012 +0200
@@ -22,4 +22,3 @@
         d = flaskg.dicts[item_name]
         result = d.get(key, '')
         return result
-
--- a/MoinMoin/macro/MailTo.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/MailTo.py	Mon Jun 25 12:03:12 2012 +0200
@@ -38,4 +38,3 @@
             result = moin_page.code(children=[text, "<{0}>".format(email)])
 
         return result
-
--- a/MoinMoin/macro/PagenameList.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/PagenameList.py	Mon Jun 25 12:03:12 2012 +0200
@@ -39,4 +39,3 @@
         item_names.sort()
 
         return self.create_pagelink_list(item_names, ordered=False)
-
--- a/MoinMoin/macro/RandomItem.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/RandomItem.py	Mon Jun 25 12:03:12 2012 +0200
@@ -60,4 +60,3 @@
 
         del result[-1] # kill last comma
         return result
-
--- a/MoinMoin/macro/Verbatim.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/Verbatim.py	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 class Macro(MacroInlineBase):
     def macro(self, text=u''):
         return text
-
--- a/MoinMoin/macro/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -16,4 +16,3 @@
 from MoinMoin.util import pysupport
 
 modules = pysupport.getPackageModules(__file__)
-
--- a/MoinMoin/macro/_base.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_base.py	Mon Jun 25 12:03:12 2012 +0200
@@ -98,4 +98,3 @@
             item = moin_page.list_item(children=[item_label, item_body])
             def_list.append(item)
         return def_list
-
--- a/MoinMoin/macro/_tests/test_Anchor.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_tests/test_Anchor.py	Mon Jun 25 12:03:12 2012 +0200
@@ -18,4 +18,3 @@
     test_anchor = result.attrib.values()
     # test_anchor[0] since it returns a list
     assert test_anchor[0] == arguments[0]
-
--- a/MoinMoin/macro/_tests/test_Date.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_tests/test_Date.py	Mon Jun 25 12:03:12 2012 +0200
@@ -40,4 +40,3 @@
         result = macro_obj.macro('content', arguments, 'page_url', 'alternative')
         expected = u'Aug 7, 2011'
         assert result == expected
-
--- a/MoinMoin/macro/_tests/test_DateTime.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_tests/test_DateTime.py	Mon Jun 25 12:03:12 2012 +0200
@@ -30,4 +30,3 @@
     arguments = ['incorrect_argument']
     with pytest.raises(ValueError):
         macro_obj.macro('content', arguments, 'page_url', 'alternative')
-
--- a/MoinMoin/macro/_tests/test_GetText.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_tests/test_GetText.py	Mon Jun 25 12:03:12 2012 +0200
@@ -16,4 +16,3 @@
     result = macro_obj.macro('content', arguments, 'page_url', 'alternative')
     expected = u'test_argument1 test_argument2'
     assert result == expected
-
--- a/MoinMoin/macro/_tests/test_GetVal.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_tests/test_GetVal.py	Mon Jun 25 12:03:12 2012 +0200
@@ -49,4 +49,3 @@
         arguments[1] = u'Two'
         result = macro_obj.macro('content', arguments, 'page_url', 'alternative')
         assert result == u'2'
-
--- a/MoinMoin/macro/_tests/test_Verbatim.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_tests/test_Verbatim.py	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
     macro_obj = Macro()
     result = macro_obj.macro(u'test_text')
     assert result == u'test_text'
-
--- a/MoinMoin/macro/_tests/test__base.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/macro/_tests/test__base.py	Mon Jun 25 12:03:12 2012 +0200
@@ -56,4 +56,3 @@
         macroinlineonlybase_obj = Test_MacroInlineOnlyBase()
         result = macroinlineonlybase_obj.__call__('content', 'arguments', 'page_url', 'alternative', context_block=False)
         assert result == 'test_macro'
-
--- a/MoinMoin/mail/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/mail/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -6,5 +6,3 @@
 
     Subpackage containing e-mail support code.
 """
-
-
--- a/MoinMoin/mail/_tests/test_sendmail.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/mail/_tests/test_sendmail.py	Mon Jun 25 12:03:12 2012 +0200
@@ -128,4 +128,3 @@
         assert sendmail.encodeAddress(address, self.charset) == expected
 
 coverage_modules = ['MoinMoin.mail.sendmail']
-
--- a/MoinMoin/mail/sendmail.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/mail/sendmail.py	Mon Jun 25 12:03:12 2012 +0200
@@ -243,4 +243,3 @@
 
     # return concatenated parts
     return ''.join(email)
-
--- a/MoinMoin/script/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -59,4 +59,3 @@
 
 def fatal(msg):
     sys.exit(msg)
-
--- a/MoinMoin/script/account/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/account/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 """
     MoinMoin - User Accounts Management Scripts
 """
-
--- a/MoinMoin/script/account/create.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/account/create.py	Mon Jun 25 12:03:12 2012 +0200
@@ -41,4 +41,3 @@
         else:
             u = user.User(auth_username=name)
             print " %-20s %-25s %-35s - created." % (u.itemid, u.name, u.email),
-
--- a/MoinMoin/script/account/disable.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/account/disable.py	Mon Jun 25 12:03:12 2012 +0200
@@ -51,4 +51,3 @@
             print "- disabled."
         else:
             print "- is already disabled."
-
--- a/MoinMoin/script/account/resetpw.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/account/resetpw.py	Mon Jun 25 12:03:12 2012 +0200
@@ -47,4 +47,3 @@
         u.enc_password = crypto.crypt_password(password)
         u.save()
         print 'Password set.'
-
--- a/MoinMoin/script/maint/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 """
     MoinMoin - Maintenance Script Package
 """
-
--- a/MoinMoin/script/maint/index.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/index.py	Mon Jun 25 12:03:12 2012 +0200
@@ -106,4 +106,3 @@
                 for k, v in kvs:
                     print k, repr(v)[:70]
                 print
-
--- a/MoinMoin/script/maint/modified_systemitems.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/modified_systemitems.py	Mon Jun 25 12:03:12 2012 +0200
@@ -40,4 +40,3 @@
                 print item_name
         else:
             print "Not any modified system items found!"
-
--- a/MoinMoin/script/maint/modify_item.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/modify_item.py	Mon Jun 25 12:03:12 2012 +0200
@@ -72,4 +72,3 @@
         item = app.storage[name]
         with open(data_file, 'rb') as df:
             item.store_revision(meta, df, overwrite=overwrite)
-
--- a/MoinMoin/script/maint/moinshell.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/moinshell.py	Mon Jun 25 12:03:12 2012 +0200
@@ -78,4 +78,3 @@
                 pass
 
         code.interact(self.banner, local=context)
-
--- a/MoinMoin/script/maint/reduce_revisions.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/reduce_revisions.py	Mon Jun 25 12:03:12 2012 +0200
@@ -42,4 +42,3 @@
                     rev.destroy()
 
         print "Finished reducing backend."
-
--- a/MoinMoin/script/maint/serialization.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/serialization.py	Mon Jun 25 12:03:12 2012 +0200
@@ -60,4 +60,3 @@
     def run(self, filename=None):
         with open_file(filename, "rb") as f:
             deserialize(f, app.storage.backend)
-
--- a/MoinMoin/script/maint/set_meta.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/maint/set_meta.py	Mon Jun 25 12:03:12 2012 +0200
@@ -76,4 +76,3 @@
                 print "Processing {0!r}, removing {1}.".format(item_name, key)
 
             item.commit()
-
--- a/MoinMoin/script/migration/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/migration/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 """
 MoinMoin - migration scripts
 """
-
--- a/MoinMoin/script/migration/moin19/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/migration/moin19/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 """
 MoinMoin - migration (upgrading) code for upgrades 1.9 -> 2.0
 """
-
--- a/MoinMoin/script/migration/moin19/_logfile19.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/migration/moin19/_logfile19.py	Mon Jun 25 12:03:12 2012 +0200
@@ -454,4 +454,3 @@
             self._output.write(line)
             self._output.close() # does this maybe help against the sporadic fedora wikis 160 \0 bytes in the edit-log?
             del self._output # re-open the output file automagically
-
--- a/MoinMoin/script/migration/moin19/_utils19.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/migration/moin19/_utils19.py	Mon Jun 25 12:03:12 2012 +0200
@@ -161,4 +161,3 @@
         wikiname = ''.join(parts)
 
     return wikiname.decode(charset)
-
--- a/MoinMoin/script/migration/moin19/import19.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/script/migration/moin19/import19.py	Mon Jun 25 12:03:12 2012 +0200
@@ -609,4 +609,3 @@
     else:
         raise ValueError("unsupported content object: {0!r}".format(content))
     return size, HASH_ALGORITHM, unicode(hash.hexdigest())
-
--- a/MoinMoin/search/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/search/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -29,4 +29,3 @@
     submit = String.using(default=L_('Search'), optional=True)
 
     validators = [ValidSearch()]
-
--- a/MoinMoin/search/_tests/test_analyzers.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/search/_tests/test_analyzers.py	Mon Jun 25 12:03:12 2012 +0200
@@ -168,4 +168,3 @@
         for value, expected_tokens in self.test_cases_index:
             tokens = [token.text for token in tokenizer(value, mode="index")]
             assert set(expected_tokens) == set(tokens)
-
--- a/MoinMoin/search/analyzers.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/search/analyzers.py	Mon Jun 25 12:03:12 2012 +0200
@@ -134,4 +134,3 @@
                      )
     analyzer = RegexTokenizer(r"\S+") | iwf | LowercaseFilter()
     return analyzer
-
--- a/MoinMoin/security/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/security/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -356,4 +356,3 @@
             rights = [r for r in rights.split(',') if r in self.rights]
 
         return modifier, entries, rights
-
--- a/MoinMoin/security/_tests/test_security.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/security/_tests/test_security.py	Mon Jun 25 12:03:12 2012 +0200
@@ -412,4 +412,3 @@
 
 
 coverage_modules = ['MoinMoin.security']
-
--- a/MoinMoin/security/_tests/test_textcha.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/security/_tests/test_textcha.py	Mon Jun 25 12:03:12 2012 +0200
@@ -115,4 +115,3 @@
         test_element.parent = test_form
         result = textchavalid_obj.validate(test_element, 'test_state')
         assert result
-
--- a/MoinMoin/security/_tests/test_ticket.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/security/_tests/test_ticket.py	Mon Jun 25 12:03:12 2012 +0200
@@ -27,4 +27,3 @@
 
 
 coverage_modules = ['MoinMoin.security.ticket']
-
--- a/MoinMoin/security/textcha.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/security/textcha.py	Mon Jun 25 12:03:12 2012 +0200
@@ -176,4 +176,3 @@
     """a form providing TextCha support"""
     textcha_question = String
     textcha = String.using(label=L_('TextCha')).validated_by(TextChaValid())
-
--- a/MoinMoin/security/ticket.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/security/ticket.py	Mon Jun 25 12:03:12 2012 +0200
@@ -64,4 +64,3 @@
     ourticket = createTicket(timestamp_str, **kw)
     logging.debug("checkTicket: returning {0!r}, got {1!r}, expected {2!r}".format(ticket == ourticket, ticket, ourticket))
     return ticket == ourticket
-
--- a/MoinMoin/signalling/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/signalling/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -14,4 +14,3 @@
 
 # import all signal handler modules so they install their handlers:
 from . import log
-
--- a/MoinMoin/signalling/log.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/signalling/log.py	Mon Jun 25 12:03:12 2012 +0200
@@ -21,4 +21,3 @@
 def log_item_modified(app, item_name):
     wiki_name = app.cfg.interwikiname
     logging.info("item {0}:{1} modified".format(wiki_name, item_name))
-
--- a/MoinMoin/signalling/signals.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/signalling/signals.py	Mon Jun 25 12:03:12 2012 +0200
@@ -14,4 +14,3 @@
 
 item_displayed = _signals.signal('item_displayed')
 item_modified = _signals.signal('item_modified')
-
--- a/MoinMoin/static/js/common.js	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/static/js/common.js	Mon Jun 25 12:03:12 2012 +0200
@@ -488,4 +488,3 @@
     $('#moin-usersettings form').submit(submitHandler);
 }
 $(document).ready(initMoinUsersettings);
-
--- a/MoinMoin/static/js/index_action.js	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/static/js/index_action.js	Mon Jun 25 12:03:12 2012 +0200
@@ -247,4 +247,3 @@
     $('#moin-download-trigger').multiDownload('click', { delay: 3000 });
 
 });
-
--- a/MoinMoin/static/js/jfu.js	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/static/js/jfu.js	Mon Jun 25 12:03:12 2012 +0200
@@ -296,4 +296,3 @@
     // Initialize jQuery File Upload (Extended User Interface Version):
     $('#file_upload').fileUploadUIX();
 });
-
--- a/MoinMoin/storage/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -88,4 +88,3 @@
         '': content_acl,
     }
     return create_mapping(uri, mounts, acls)
-
--- a/MoinMoin/storage/backends/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/backends/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -77,4 +77,3 @@
         """
         delete meta, data related to metaid from the backend
         """
-
--- a/MoinMoin/storage/backends/_tests/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/backends/_tests/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -127,4 +127,3 @@
             m = tuple(sorted(m.items()))
             result.add((k, m, d.read()))
         assert result == expected_result
-
--- a/MoinMoin/storage/backends/_tests/test_fileserver.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/backends/_tests/test_fileserver.py	Mon Jun 25 12:03:12 2012 +0200
@@ -114,4 +114,3 @@
             data = data.read()
             result.add((meta, data))
         assert result == expected_result
-
--- a/MoinMoin/storage/backends/_tests/test_stores.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/backends/_tests/test_stores.py	Mon Jun 25 12:03:12 2012 +0200
@@ -44,5 +44,3 @@
         self.be = MutableBackend(meta_store, data_store)
         self.be.create()
         self.be.open()
-
-
--- a/MoinMoin/storage/backends/_util.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/backends/_util.py	Mon Jun 25 12:03:12 2012 +0200
@@ -50,4 +50,3 @@
         if not self._finished:
             raise AttributeError("do not access hash attribute before having read all data")
         return self._hash
-
--- a/MoinMoin/storage/backends/fileserver.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/backends/fileserver.py	Mon Jun 25 12:03:12 2012 +0200
@@ -180,4 +180,3 @@
         meta = self._get_meta(itemname, path)
         data = self._get_data(itemname, path)
         return meta, data
-
--- a/MoinMoin/storage/backends/stores.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/backends/stores.py	Mon Jun 25 12:03:12 2012 +0200
@@ -169,4 +169,3 @@
         dataid = meta[DATAID]
         self._del_meta(metaid)
         self._del_data(dataid)
-
--- a/MoinMoin/storage/error.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/error.py	Mon Jun 25 12:03:12 2012 +0200
@@ -40,4 +40,3 @@
     """
     Raised if the Revision you are trying to create already exists.
     """
-
--- a/MoinMoin/storage/middleware/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -6,4 +6,3 @@
 
 Middleware sits either on a backend or on another middleware.
 """
-
--- a/MoinMoin/storage/middleware/_tests/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/_tests/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -4,4 +4,3 @@
 """
 MoinMoin - middleware tests
 """
-
--- a/MoinMoin/storage/middleware/_tests/test_indexing.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/_tests/test_indexing.py	Mon Jun 25 12:03:12 2012 +0200
@@ -417,4 +417,3 @@
             #print r.meta
             #print r.data.read()
             pass
-
--- a/MoinMoin/storage/middleware/_tests/test_protecting.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/_tests/test_protecting.py	Mon Jun 25 12:03:12 2012 +0200
@@ -121,6 +121,3 @@
         item = self.imw[PROTECTED]
         with pytest.raises(AccessDenied):
             item.destroy_all_revisions()
-
-
-
--- a/MoinMoin/storage/middleware/_tests/test_routing.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/_tests/test_routing.py	Mon Jun 25 12:03:12 2012 +0200
@@ -97,4 +97,3 @@
     sub_revid = router.store(dict(name=u'sub/bar'), StringIO(''))
     existing_now = set([revid for mountpoint, revid in router])
     assert existing_now == set([root_revid, sub_revid]) | existing_before
-
--- a/MoinMoin/storage/middleware/_tests/test_serialization.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/_tests/test_serialization.py	Mon Jun 25 12:03:12 2012 +0200
@@ -83,4 +83,3 @@
     print sorted(source.backend)
     print sorted(target.backend)
     assert sorted(source.backend) == sorted(target.backend)
-
--- a/MoinMoin/storage/middleware/_tests/test_validation.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/_tests/test_validation.py	Mon Jun 25 12:03:12 2012 +0200
@@ -84,4 +84,3 @@
                 print e.valid, e
             print m.valid, m
         assert valid
-
--- a/MoinMoin/storage/middleware/indexing.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/indexing.py	Mon Jun 25 12:03:12 2012 +0200
@@ -995,4 +995,3 @@
 
     def __repr__(self):
         return "Meta _doc: {0!r} _meta: {1!r}".format(self._doc, self._meta)
-
--- a/MoinMoin/storage/middleware/protecting.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/protecting.py	Mon Jun 25 12:03:12 2012 +0200
@@ -280,4 +280,3 @@
 
     def __cmp__(self, other):
         return cmp(self.meta, other.meta)
-
--- a/MoinMoin/storage/middleware/routing.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/routing.py	Mon Jun 25 12:03:12 2012 +0200
@@ -114,4 +114,3 @@
         if not isinstance(backend, MutableBackendBase):
             raise TypeError('backend {0!r} mounted at {1!r} is readonly'.format(backend, mountpoint))
         backend.remove(revid)
-
--- a/MoinMoin/storage/middleware/serialization.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/serialization.py	Mon Jun 25 12:03:12 2012 +0200
@@ -71,4 +71,3 @@
             assert limited._pos == 0
             # but we must seek to get forward to the next item:
             src.seek(curr_pos + data_size)
-
--- a/MoinMoin/storage/middleware/validation.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/middleware/validation.py	Mon Jun 25 12:03:12 2012 +0200
@@ -356,5 +356,3 @@
     #TODO: DuckDict.named('bookmarks').using(optional=True),
     *common_meta
 )
-
-
--- a/MoinMoin/storage/stores/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -124,4 +124,3 @@
               closing that file later. caller must not rely on some specific
               file pointer position after we return.
         """
-
--- a/MoinMoin/storage/stores/_tests/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -12,4 +12,3 @@
 
 class BytesStoreTestBase(object):
     pass
-
--- a/MoinMoin/storage/stores/_tests/conftest.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/conftest.py	Mon Jun 25 12:03:12 2012 +0200
@@ -97,4 +97,3 @@
     if kind == 'FileStore':
         store = ByteToStreamWrappingStore(store)
     return store
-
--- a/MoinMoin/storage/stores/_tests/test_all.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/test_all.py	Mon Jun 25 12:03:12 2012 +0200
@@ -64,4 +64,3 @@
     for i in range(1000):
         key = str(i)
         del store[key]
-
--- a/MoinMoin/storage/stores/_tests/test_fs.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/test_fs.py	Mon Jun 25 12:03:12 2012 +0200
@@ -39,4 +39,3 @@
 def test_from_uri(tmpdir, Store):
     store = Store.from_uri("%s" % tmpdir)
     assert store.path == tmpdir
-
--- a/MoinMoin/storage/stores/_tests/test_kc.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/test_kc.py	Mon Jun 25 12:03:12 2012 +0200
@@ -34,5 +34,3 @@
     target = tmpdir.join('store.kch')
     store.destroy()
     assert not target.check()
-
-
--- a/MoinMoin/storage/stores/_tests/test_kt.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/test_kt.py	Mon Jun 25 12:03:12 2012 +0200
@@ -44,4 +44,3 @@
     store = Store.from_uri("localhost:1970")
     assert store.host == 'localhost'
     assert store.port == 1970
-
--- a/MoinMoin/storage/stores/_tests/test_memory.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/test_memory.py	Mon Jun 25 12:03:12 2012 +0200
@@ -33,4 +33,3 @@
 def test_from_uri(Store):
     store = Store.from_uri("mem://")
     assert isinstance(store, Store)
-
--- a/MoinMoin/storage/stores/_tests/test_sqla.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/test_sqla.py	Mon Jun 25 12:03:12 2012 +0200
@@ -33,4 +33,3 @@
     store = Store.from_uri("sqlite://%s::test_base" % tmpdir)
     assert store.db_uri == "sqlite://%s" % tmpdir
     assert store.table_name == "test_base"
-
--- a/MoinMoin/storage/stores/_tests/test_sqlite.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/_tests/test_sqlite.py	Mon Jun 25 12:03:12 2012 +0200
@@ -57,4 +57,3 @@
     assert store.db_name == tmpdir
     assert store.table_name == 'test_table'
     assert store.compression_level == 2
-
--- a/MoinMoin/storage/stores/fs.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/fs.py	Mon Jun 25 12:03:12 2012 +0200
@@ -83,4 +83,3 @@
         with open(self._mkpath(key), "wb") as f:
             blocksize = 64 * 1024
             shutil.copyfileobj(stream, f, blocksize)
-
--- a/MoinMoin/storage/stores/kc.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/kc.py	Mon Jun 25 12:03:12 2012 +0200
@@ -105,4 +105,3 @@
     def __setitem__(self, key, stream):
         if not self._db.set(key, stream.read()):
             raise KeyError("set error: " + str(self._db.error()))
-
--- a/MoinMoin/storage/stores/kt.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/kt.py	Mon Jun 25 12:03:12 2012 +0200
@@ -159,4 +159,3 @@
         response = self.client.getresponse()
         body = response.read()
         return response.status == 201
-
--- a/MoinMoin/storage/stores/memory.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/memory.py	Mon Jun 25 12:03:12 2012 +0200
@@ -63,4 +63,3 @@
 
     def __setitem__(self, key, stream):
         self._st[key] = stream.read()
-
--- a/MoinMoin/storage/stores/sqla.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/sqla.py	Mon Jun 25 12:03:12 2012 +0200
@@ -112,4 +112,3 @@
 
     def __setitem__(self, key, stream):
         self.table.insert().execute(key=key, value=stream.read())
-
--- a/MoinMoin/storage/stores/sqlite.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/sqlite.py	Mon Jun 25 12:03:12 2012 +0200
@@ -126,4 +126,3 @@
         value = self._compress(value)
         with self.conn:
             self.conn.execute('insert into {0} values (?, ?)'.format(self.table_name), (key, buffer(value)))
-
--- a/MoinMoin/storage/stores/wrappers.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/storage/stores/wrappers.py	Mon Jun 25 12:03:12 2012 +0200
@@ -35,4 +35,3 @@
 
     def __len__(self):
         return len(self._st)
-
--- a/MoinMoin/templates/404.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/404.html	Mon Jun 25 12:03:12 2012 +0200
@@ -7,8 +7,3 @@
 </p>
 
 {% endblock %}
-
-
-
-
-
--- a/MoinMoin/templates/atom.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/atom.html	Mon Jun 25 12:03:12 2012 +0200
@@ -59,4 +59,3 @@
     </table>
     {{ atom_style() }}
 {%- endif -%}
-
--- a/MoinMoin/templates/base.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/base.html	Mon Jun 25 12:03:12 2012 +0200
@@ -70,4 +70,3 @@
 
 </body>
 </html>
-
--- a/MoinMoin/templates/content.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/content.html	Mon Jun 25 12:03:12 2012 +0200
@@ -6,4 +6,3 @@
     <div>
 {% endif %}
 {% endblock %}
-
--- a/MoinMoin/templates/delete.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/delete.html	Mon Jun 25 12:03:12 2012 +0200
@@ -16,6 +16,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
-
-
--- a/MoinMoin/templates/destroy.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/destroy.html	Mon Jun 25 12:03:12 2012 +0200
@@ -30,8 +30,3 @@
     </div>
 {% endif %}
 {% endblock %}
-
-
-
-
-
--- a/MoinMoin/templates/diff.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/diff.html	Mon Jun 25 12:03:12 2012 +0200
@@ -6,4 +6,3 @@
 {% endblock %}
 {{ diff_html }}
 {% endblock %}
-
--- a/MoinMoin/templates/diff_text.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/diff_text.html	Mon Jun 25 12:03:12 2012 +0200
@@ -45,4 +45,3 @@
         </tr>
     {% endfor %}
 </table>
-
--- a/MoinMoin/templates/diff_text_atom.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/diff_text_atom.html	Mon Jun 25 12:03:12 2012 +0200
@@ -40,4 +40,3 @@
     .moin-diff-added span { background-color: #80FF80; }
     .moin-diff-removed span { background-color: #FFFF80; }
 </style>
-
--- a/MoinMoin/templates/error.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/error.html	Mon Jun 25 12:03:12 2012 +0200
@@ -3,4 +3,3 @@
 <h1>{{ title }}</h1>
 <p>{{ description }}</p>
 {% endblock %}
-
--- a/MoinMoin/templates/forms.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/forms.html	Mon Jun 25 12:03:12 2012 +0200
@@ -119,4 +119,3 @@
     <script src="{{ url_for('serve.files', name='jquery_file_upload', filename='jquery.fileupload.js') }}"></script>
     <script src="{{ url_for('serve.files', name='jquery_file_upload', filename='jquery.fileupload-ui.js') }}"></script>
 {% endmacro %}
-
--- a/MoinMoin/templates/global_history.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/global_history.html	Mon Jun 25 12:03:12 2012 +0200
@@ -53,4 +53,3 @@
         {% endif %}
     </div>
 {% endblock %}
-
--- a/MoinMoin/templates/global_tags.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/global_tags.html	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 </ul>
 {% endif %}
 {% endblock %}
-
--- a/MoinMoin/templates/highlight.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/highlight.html	Mon Jun 25 12:03:12 2012 +0200
@@ -8,4 +8,3 @@
 {% endblock %}
 {{ data_text }}
 {% endblock %}
-
--- a/MoinMoin/templates/history.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/history.html	Mon Jun 25 12:03:12 2012 +0200
@@ -75,4 +75,3 @@
         </form>
     {% endif %}
 {% endblock %}
-
--- a/MoinMoin/templates/index.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/index.html	Mon Jun 25 12:03:12 2012 +0200
@@ -179,4 +179,3 @@
     <script src="{{ url_for('static', filename='js/jfu.js') }}"></script>
     <div id="lightbox">&nbsp;</div>
 {% endblock %}
-
--- a/MoinMoin/templates/item_link_list.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/item_link_list.html	Mon Jun 25 12:03:12 2012 +0200
@@ -12,4 +12,3 @@
 </ul>
 {% endif %}
 {% endblock %}
-
--- a/MoinMoin/templates/itemviews.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/itemviews.html	Mon Jun 25 12:03:12 2012 +0200
@@ -94,4 +94,3 @@
         {%- endif %}
     {%- endfor %}
 </ul>
-
--- a/MoinMoin/templates/layout.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/layout.html	Mon Jun 25 12:03:12 2012 +0200
@@ -175,4 +175,3 @@
 {{ after_footer }}
 
 {% endblock %}
-
--- a/MoinMoin/templates/login.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/login.html	Mon Jun 25 12:03:12 2012 +0200
@@ -37,4 +37,3 @@
 
 </div>
 {% endblock %}
-
--- a/MoinMoin/templates/lookup.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/lookup.html	Mon Jun 25 12:03:12 2012 +0200
@@ -48,4 +48,3 @@
     {% endif %}
     {% endif %}
 {% endblock %}
-
--- a/MoinMoin/templates/lostpass.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/lostpass.html	Mon Jun 25 12:03:12 2012 +0200
@@ -15,4 +15,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/templates/meta.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/meta.html	Mon Jun 25 12:03:12 2012 +0200
@@ -20,5 +20,3 @@
 </div>
 {% endif %}
 {% endblock %}
-
-
--- a/MoinMoin/templates/modify_anywikidraw.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_anywikidraw.html	Mon Jun 25 12:03:12 2012 +0200
@@ -20,4 +20,3 @@
 </p>
 <br />
 {% endblock %}
-
--- a/MoinMoin/templates/modify_applet.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_applet.html	Mon Jun 25 12:03:12 2012 +0200
@@ -20,4 +20,3 @@
     {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/templates/modify_binary.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_binary.html	Mon Jun 25 12:03:12 2012 +0200
@@ -7,4 +7,3 @@
     {{ forms.render_field(gen, form['comment'], 'text') }}
 </dl>
 {% endblock %}
-
--- a/MoinMoin/templates/modify_show_template_selection.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_show_template_selection.html	Mon Jun 25 12:03:12 2012 +0200
@@ -14,4 +14,3 @@
     {% endfor %}
 </ul>
 {% endblock %}
-
--- a/MoinMoin/templates/modify_show_type_selection.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_show_type_selection.html	Mon Jun 25 12:03:12 2012 +0200
@@ -19,4 +19,3 @@
     {% endfor %}
 </table>
 {% endblock %}
-
--- a/MoinMoin/templates/modify_svg-edit.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_svg-edit.html	Mon Jun 25 12:03:12 2012 +0200
@@ -6,4 +6,3 @@
 </p>
 <br />
 {% endblock %}
-
--- a/MoinMoin/templates/modify_text.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_text.html	Mon Jun 25 12:03:12 2012 +0200
@@ -21,4 +21,3 @@
 {% endif %}
 <br />
 {% endblock %}
-
--- a/MoinMoin/templates/modify_text_html.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_text_html.html	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 {{ gen.textarea(form['data_text'], class='ckeditor', lang=lang, dir=direction, rows=rows_data, cols=cols) }}
 </p>
 {% endblock %}
-
--- a/MoinMoin/templates/modify_twikidraw.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/modify_twikidraw.html	Mon Jun 25 12:03:12 2012 +0200
@@ -15,4 +15,3 @@
 </p>
 <br />
 {% endblock %}
-
--- a/MoinMoin/templates/openid_register.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/openid_register.html	Mon Jun 25 12:03:12 2012 +0200
@@ -22,4 +22,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/templates/recoverpass.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/recoverpass.html	Mon Jun 25 12:03:12 2012 +0200
@@ -14,4 +14,3 @@
   {{ gen.input(form['submit'], type='submit') }}
 {{ gen.form.close() }}
 {% endblock %}
-
--- a/MoinMoin/templates/register.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/register.html	Mon Jun 25 12:03:12 2012 +0200
@@ -18,4 +18,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/templates/rename.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/rename.html	Mon Jun 25 12:03:12 2012 +0200
@@ -17,4 +17,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/templates/revert.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/revert.html	Mon Jun 25 12:03:12 2012 +0200
@@ -13,4 +13,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/templates/search.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/search.html	Mon Jun 25 12:03:12 2012 +0200
@@ -73,4 +73,3 @@
         {% endif %}
     {% endif %}
 {% endblock %}
-
--- a/MoinMoin/templates/show.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/show.html	Mon Jun 25 12:03:12 2012 +0200
@@ -93,4 +93,3 @@
     <br id="moin-show-comments" />
 {%- endif %}
 {% endblock %}
-
--- a/MoinMoin/templates/sitemap.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/sitemap.html	Mon Jun 25 12:03:12 2012 +0200
@@ -16,4 +16,3 @@
     {% endif %}
 {% endfor %}
 {% endblock %}
-
--- a/MoinMoin/templates/snippets.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/snippets.html	Mon Jun 25 12:03:12 2012 +0200
@@ -70,4 +70,3 @@
 {# Additional Javascript #}
 {% macro scripts() -%}
 {%- endmacro %}
-
--- a/MoinMoin/templates/usersettings.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/usersettings.html	Mon Jun 25 12:03:12 2012 +0200
@@ -37,4 +37,3 @@
 </div>
 
 {% endblock %}
-
--- a/MoinMoin/templates/usersettings_ajax.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/usersettings_ajax.html	Mon Jun 25 12:03:12 2012 +0200
@@ -13,4 +13,3 @@
 {% elif part == 'options' %}
     {{ user_forms.options(form) }}
 {% endif %}
-
--- a/MoinMoin/templates/usersettings_forms.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/usersettings_forms.html	Mon Jun 25 12:03:12 2012 +0200
@@ -81,4 +81,3 @@
 {{ forms.render_button(_("Save")) }}
 {{ gen.form.close() }}
 {% endmacro %}
-
--- a/MoinMoin/templates/utils.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/templates/utils.html	Mon Jun 25 12:03:12 2012 +0200
@@ -82,4 +82,3 @@
         </div>
     {% endif %}
 {% endmacro %}
-
--- a/MoinMoin/themes/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -433,4 +433,3 @@
                             'gen': make_generator(),
                             'search_form': SearchForm.from_defaults(),
                             })
-
--- a/MoinMoin/themes/_tests/test_navi_bar.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/_tests/test_navi_bar.py	Mon Jun 25 12:03:12 2012 +0200
@@ -65,4 +65,3 @@
     test_result = themes.contenttype_to_class(u'MoinMoin/some/value')
     expected = u'moin-mime-MoinMoin'
     assert test_result == expected
-
--- a/MoinMoin/themes/foobar/static/css/common.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/static/css/common.css	Mon Jun 25 12:03:12 2012 +0200
@@ -237,4 +237,3 @@
 .moin-small{font-size:.83em}
 @media print{#moin-global-tray,#moin-local-panel,#moin-footer,#moin-search{display:none}
 }
-
--- a/MoinMoin/themes/foobar/static/css/msie.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/static/css/msie.css	Mon Jun 25 12:03:12 2012 +0200
@@ -1,2 +1,1 @@
 /* for now, don't add special workarounds for Internet Explorer */
-
--- a/MoinMoin/themes/foobar/static/css/stylus/pygments_default.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/static/css/stylus/pygments_default.css	Mon Jun 25 12:03:12 2012 +0200
@@ -59,4 +59,3 @@
 .vg { color: #19177C } /* Name.Variable.Global */
 .vi { color: #19177C } /* Name.Variable.Instance */
 .il { color: #666666 } /* Literal.Number.Integer.Long */
-
--- a/MoinMoin/themes/foobar/static/css/stylus/reset.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/static/css/stylus/reset.css	Mon Jun 25 12:03:12 2012 +0200
@@ -30,4 +30,3 @@
 hr { display: block; height: 1px; border: 0; border-top: 1px solid #cccccc; margin: 1em 0; padding: 0; }
 input, select { vertical-align: middle; }
 /* end HTML5 reset */
-
--- a/MoinMoin/themes/foobar/static/css/stylus/smileys.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/static/css/stylus/smileys.css	Mon Jun 25 12:03:12 2012 +0200
@@ -25,4 +25,3 @@
 .moin-thumbs-up:before { content: url('../img/smileys/thumbs-up.png'); }
 .moin-tired:before { content: url('../img/smileys/tired.png'); }
 .moin-tongue:before { content: url('../img/smileys/tongue.png'); }
-
--- a/MoinMoin/themes/foobar/static/css/stylus/stylus_notice.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/static/css/stylus/stylus_notice.css	Mon Jun 25 12:03:12 2012 +0200
@@ -6,5 +6,3 @@
  *
  * stylus --include-css --compress < main.styl > ../common.css
  */
-
-
--- a/MoinMoin/themes/foobar/static/css/stylus/userstyles.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/static/css/stylus/userstyles.css	Mon Jun 25 12:03:12 2012 +0200
@@ -12,4 +12,3 @@
 .center { text-align: center; }
 .right { text-align: right; }
 .justify { text-align: justify; }
-
--- a/MoinMoin/themes/foobar/templates/delete.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/delete.html	Mon Jun 25 12:03:12 2012 +0200
@@ -13,6 +13,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
-
-
--- a/MoinMoin/themes/foobar/templates/destroy.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/destroy.html	Mon Jun 25 12:03:12 2012 +0200
@@ -27,8 +27,3 @@
     </div>
 {% endif %}
 {% endblock %}
-
-
-
-
-
--- a/MoinMoin/themes/foobar/templates/global.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/global.html	Mon Jun 25 12:03:12 2012 +0200
@@ -8,4 +8,3 @@
     {% endblock %}
 </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/global_history.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/global_history.html	Mon Jun 25 12:03:12 2012 +0200
@@ -53,4 +53,3 @@
         {% endif %}
     </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/global_tags.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/global_tags.html	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 </ul>
 {% endif %}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/history.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/history.html	Mon Jun 25 12:03:12 2012 +0200
@@ -72,4 +72,3 @@
         </form>
     {% endif %}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/index.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/index.html	Mon Jun 25 12:03:12 2012 +0200
@@ -172,4 +172,3 @@
     <script src="{{ url_for('static', filename='js/jfu.js') }}"></script>
     <div id="lightbox">&nbsp;</div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/item_link_list.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/item_link_list.html	Mon Jun 25 12:03:12 2012 +0200
@@ -12,4 +12,3 @@
 </ul>
 {% endif %}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/itemviews.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/itemviews.html	Mon Jun 25 12:03:12 2012 +0200
@@ -88,4 +88,3 @@
         {%- endif %}
     {%- endfor %}
 </ul>
-
--- a/MoinMoin/themes/foobar/templates/layout.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/layout.html	Mon Jun 25 12:03:12 2012 +0200
@@ -167,4 +167,3 @@
 </div>
 
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/local.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/local.html	Mon Jun 25 12:03:12 2012 +0200
@@ -130,4 +130,3 @@
 </ul>
 </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/login.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/login.html	Mon Jun 25 12:03:12 2012 +0200
@@ -39,4 +39,3 @@
 
 </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/lostpass.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/lostpass.html	Mon Jun 25 12:03:12 2012 +0200
@@ -15,4 +15,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/meta.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/meta.html	Mon Jun 25 12:03:12 2012 +0200
@@ -7,4 +7,3 @@
 </div>
 {% endif %}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/modify_applet.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/modify_applet.html	Mon Jun 25 12:03:12 2012 +0200
@@ -15,4 +15,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/modify_binary.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/modify_binary.html	Mon Jun 25 12:03:12 2012 +0200
@@ -5,4 +5,3 @@
 {{ forms.render_textcha(gen, form) }}
 {{ forms.render_field(gen, form['comment'], 'text') }}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/modify_show_template_selection.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/modify_show_template_selection.html	Mon Jun 25 12:03:12 2012 +0200
@@ -14,4 +14,3 @@
     {% endfor %}
 </ul>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/modify_show_type_selection.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/modify_show_type_selection.html	Mon Jun 25 12:03:12 2012 +0200
@@ -19,4 +19,3 @@
     {% endfor %}
 </table>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/modify_text.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/modify_text.html	Mon Jun 25 12:03:12 2012 +0200
@@ -17,4 +17,3 @@
 {{ gen.textarea(form['data_text'], lang=lang, dir=direction, rows=rows_data, cols=cols) }}
 <br />
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/modify_text_html.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/modify_text_html.html	Mon Jun 25 12:03:12 2012 +0200
@@ -11,4 +11,3 @@
 {{ gen.textarea(form['data_text'], class='ckeditor', lang=lang, dir=direction, rows=rows_data, cols=cols) }}
 </p>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/recoverpass.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/recoverpass.html	Mon Jun 25 12:03:12 2012 +0200
@@ -14,4 +14,3 @@
   {{ gen.input(form['submit'], type='submit') }}
 {{ gen.form.close() }}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/register.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/register.html	Mon Jun 25 12:03:12 2012 +0200
@@ -18,4 +18,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/rename.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/rename.html	Mon Jun 25 12:03:12 2012 +0200
@@ -14,4 +14,3 @@
 {{ gen.form.close() }}
 </div>
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/show.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/show.html	Mon Jun 25 12:03:12 2012 +0200
@@ -27,4 +27,3 @@
     <br id="moin-show-comments" />
 {%- endif %}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/sitemap.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/sitemap.html	Mon Jun 25 12:03:12 2012 +0200
@@ -13,4 +13,3 @@
     {% endif %}
 {% endfor %}
 {% endblock %}
-
--- a/MoinMoin/themes/foobar/templates/snippets.html	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/foobar/templates/snippets.html	Mon Jun 25 12:03:12 2012 +0200
@@ -50,4 +50,3 @@
 {# Additional Javascript #}
 {% macro scripts() -%}
 {%- endmacro %}
-
--- a/MoinMoin/themes/modernized/static/css/common.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/modernized/static/css/common.css	Mon Jun 25 12:03:12 2012 +0200
@@ -692,4 +692,3 @@
 #moin-pagelocation, #moin-pageinfo  { display: none; }
 
 }   /* end of @media projection */
-
--- a/MoinMoin/themes/modernized/static/css/msie.css	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/themes/modernized/static/css/msie.css	Mon Jun 25 12:03:12 2012 +0200
@@ -42,4 +42,3 @@
 
 /*  avoid a gap between navibar and pageline on IE7  */
 #moin-navibar { zoom: 1; }
-
--- a/MoinMoin/user.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/user.py	Mon Jun 25 12:03:12 2012 +0200
@@ -734,4 +734,3 @@
                     sitename=self._cfg.sitename or "Wiki")
         mailok, msg = sendmail.sendmail(subject, text, to=[self.email], mail_from=self._cfg.mail_from)
         return mailok, msg
-
--- a/MoinMoin/util/SubProcess.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/SubProcess.py	Mon Jun 25 12:03:12 2012 +0200
@@ -204,4 +204,3 @@
 if __name__ == '__main__':
     print exec_cmd("python", "import time ; time.sleep(20) ; print 'never!' ;", timeout=10)
     print exec_cmd("python", "import time ; time.sleep(20) ; print '20s gone' ;")
-
--- a/MoinMoin/util/__init__.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/__init__.py	Mon Jun 25 12:03:12 2012 +0200
@@ -114,4 +114,3 @@
         previous_offset = -1
     next_offset = count
     return (selected_result, next_offset, previous_offset)
-
--- a/MoinMoin/util/_tests/test_crypto.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_crypto.py	Mon Jun 25 12:03:12 2012 +0200
@@ -105,4 +105,3 @@
         assert result1 != result2, ("Expected different keys for different <kw> but got the same")
 
 coverage_modules = ['MoinMoin.util.crypto']
-
--- a/MoinMoin/util/_tests/test_diff3.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_diff3.py	Mon Jun 25 12:03:12 2012 +0200
@@ -83,4 +83,3 @@
 
 
 coverage_modules = ['MoinMoin.util.diff3']
-
--- a/MoinMoin/util/_tests/test_diff_html.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_diff_html.py	Mon Jun 25 12:03:12 2012 +0200
@@ -68,4 +68,3 @@
     expected = [(4, '<br>AAA 00<span>1</span><br>AAA 00<span>2</span><br>AAA 00<span>3</span><br>AAA 00<span>4<br>AAA 005</span>',
                  4, '<span>AAA 006</span><br>AAA 00<span>7</span><br>AAA 00<span>8</span><br>AAA 00<span>9</span><br>AAA <span>1</span>00')]
     assert result == expected
-
--- a/MoinMoin/util/_tests/test_diff_text.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_diff_text.py	Mon Jun 25 12:03:12 2012 +0200
@@ -67,4 +67,3 @@
 
 
 coverage_modules = ['MoinMoin.util.diff_text']
-
--- a/MoinMoin/util/_tests/test_filesys.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_filesys.py	Mon Jun 25 12:03:12 2012 +0200
@@ -168,4 +168,3 @@
             filesys.copytree(self.test_dir, self.test_dest_dir)
 
 coverage_modules = ['MoinMoin.util.filesys']
-
--- a/MoinMoin/util/_tests/test_forms.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_forms.py	Mon Jun 25 12:03:12 2012 +0200
@@ -99,4 +99,3 @@
     attribute_result = test_attributes['class']
     expected = 'test_attribute_class test_moin_error'
     assert attribute_result == expected
-
--- a/MoinMoin/util/_tests/test_interwiki.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_interwiki.py	Mon Jun 25 12:03:12 2012 +0200
@@ -118,4 +118,3 @@
 
 
 coverage_modules = ['MoinMoin.util.interwiki']
-
--- a/MoinMoin/util/_tests/test_iri.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_iri.py	Mon Jun 25 12:03:12 2012 +0200
@@ -414,5 +414,3 @@
     assert u[0] == ''
     assert u[1] == 'test2'
     assert unicode(u) == '/test2'
-
-
--- a/MoinMoin/util/_tests/test_lock.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_lock.py	Mon Jun 25 12:03:12 2012 +0200
@@ -169,4 +169,3 @@
             assert lock.acquire(0.1)
 
 coverage_modules = ['MoinMoin.util.lock']
-
--- a/MoinMoin/util/_tests/test_md5crypt.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_md5crypt.py	Mon Jun 25 12:03:12 2012 +0200
@@ -26,4 +26,3 @@
     result = md5crypt.apache_md5_crypt('test_pass', 'Moin_test')
     expected = '$apr1$Moin_tes$4/5zV8nADrNv3BJcY1rZX1'
     assert result == expected
-
--- a/MoinMoin/util/_tests/test_mime.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_mime.py	Mon Jun 25 12:03:12 2012 +0200
@@ -89,4 +89,3 @@
     assert t1 != t2
     assert not t1.issupertype(t2)
     assert not t2.issupertype(t1)
-
--- a/MoinMoin/util/_tests/test_mimetype.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_mimetype.py	Mon Jun 25 12:03:12 2012 +0200
@@ -16,11 +16,11 @@
         MimeType_obj = mimetype.MimeType(filename='test_file.jpg')
         # format in config.parser_text_mimetype
         test = [
-        #test_format    # test_mimetype
-        ('html',        ('text', 'html')),
-        ('css',         ('text', 'css')),
-        ('python',      ('text', 'python')),
-        ('latex',       ('text', 'latex'))
+        #test_format, test_mimetype
+        ('html', ('text', 'html')),
+        ('css', ('text', 'css')),
+        ('python', ('text', 'python')),
+        ('latex', ('text', 'latex'))
         ]
 
         for test_format, test_mimetype in test:
@@ -29,9 +29,9 @@
 
         # format not in config.parser_text_mimetype
         test = [
-        # test_format   # test_mimetype
-        ('wiki',        ('text', 'x.moin.wiki')),
-        ('irc',         ('text', 'irssi')),
+        # test_format, test_mimetype
+        ('wiki', ('text', 'x.moin.wiki')),
+        ('irc', ('text', 'irssi')),
         ('test_random', ('text', 'x-test_random'))
         ]
 
@@ -42,14 +42,14 @@
 
     def test_mime_type(self):
         test = [
-        # test_extension     # test_major/minor
-        ('.mpeg',            'video/mpeg'),
-        ('.pdf',             'application/pdf'),
-        ('.txt',             'text/plain'),
-        ('.jpeg',            'image/jpeg'),
-        ('.png',             'image/png'),
-        ('.svg',             'image/svg+xml'),
-        ('',                 'application/octet-stream')
+        # test_extension, test_major/minor
+        ('.mpeg', 'video/mpeg'),
+        ('.pdf', 'application/pdf'),
+        ('.txt', 'text/plain'),
+        ('.jpeg', 'image/jpeg'),
+        ('.png', 'image/png'),
+        ('.svg', 'image/svg+xml'),
+        ('', 'application/octet-stream')
         ]
 
         # when mimestr is None
@@ -80,4 +80,3 @@
         result3 = MimeType_obj.content_type()
         expected = 'text/x-test_file.mpeg'
         assert result3 == expected
-
--- a/MoinMoin/util/_tests/test_paramparser.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_paramparser.py	Mon Jun 25 12:03:12 2012 +0200
@@ -701,4 +701,3 @@
         assert ief(has_complex, u'2.007, 2.007')
         assert ief(has_complex, u'2.007', [2.007])
         assert ief(has_complex, u'b=2.007', [2.007])
-
--- a/MoinMoin/util/_tests/test_pysupport.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_pysupport.py	Mon Jun 25 12:03:12 2012 +0200
@@ -135,4 +135,3 @@
 
 coverage_modules = ['MoinMoin.util.pysupport']
 pytest.main("-x test_pysupport.py")
-
--- a/MoinMoin/util/_tests/test_registry.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_registry.py	Mon Jun 25 12:03:12 2012 +0200
@@ -71,4 +71,3 @@
 
     pytest.raises(ValueError, r.unregister, factory_none)
     assert len(r._entries) == 0
-
--- a/MoinMoin/util/_tests/test_send_file.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_send_file.py	Mon Jun 25 12:03:12 2012 +0200
@@ -35,4 +35,3 @@
 
         with pytest.raises(TypeError):
             send_file.send_file(None, as_attachment=True)
-
--- a/MoinMoin/util/_tests/test_thread_monitor.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_thread_monitor.py	Mon Jun 25 12:03:12 2012 +0200
@@ -43,4 +43,3 @@
         with open(self.src, "r") as f:
             f.seek(1)
             assert 'Dumping thread' in f.readline()
-
--- a/MoinMoin/util/_tests/test_tree.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_tree.py	Mon Jun 25 12:03:12 2012 +0200
@@ -65,4 +65,3 @@
 
 def test_moin_page():
     assert isinstance(moin_page, Namespace)
-
--- a/MoinMoin/util/_tests/test_util.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_util.py	Mon Jun 25 12:03:12 2012 +0200
@@ -42,4 +42,3 @@
 
 
 coverage_modules = ['MoinMoin.util']
-
--- a/MoinMoin/util/_tests/test_version.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/_tests/test_version.py	Mon Jun 25 12:03:12 2012 +0200
@@ -59,4 +59,3 @@
 
 
 coverage_modules = ['MoinMoin.util.version']
-
--- a/MoinMoin/util/clock.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/clock.py	Mon Jun 25 12:03:12 2012 +0200
@@ -45,4 +45,3 @@
     def __del__(self):
         if self.timers:
             logging.warning('These timers have not been stopped: {0}'.format(', '.join(self.timers.keys())))
-
--- a/MoinMoin/util/crypto.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/crypto.py	Mon Jun 25 12:03:12 2012 +0200
@@ -224,4 +224,3 @@
     :param kw: keys/values to compute cache key from
     """
     return hashlib.md5(repr(kw)).hexdigest()
-
--- a/MoinMoin/util/diff3.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/diff3.py	Mon Jun 25 12:03:12 2012 +0200
@@ -266,4 +266,3 @@
 
 if __name__ == '__main__':
     main()
-
--- a/MoinMoin/util/diff_html.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/diff_html.py	Mon Jun 25 12:03:12 2012 +0200
@@ -103,4 +103,3 @@
         lastmatch = (match[0] + match[2], match[1] + match[2])
 
     return result
-
--- a/MoinMoin/util/diff_text.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/diff_text.py	Mon Jun 25 12:03:12 2012 +0200
@@ -77,4 +77,3 @@
         lines[-count+3:] = []
 
     return lines
-
--- a/MoinMoin/util/filesys.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/filesys.py	Mon Jun 25 12:03:12 2012 +0200
@@ -243,4 +243,3 @@
 
 def unlock(file):
     raise NotImplementedError
-
--- a/MoinMoin/util/forms.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/forms.py	Mon Jun 25 12:03:12 2012 +0200
@@ -98,4 +98,3 @@
         if not isinstance(value, (type(None), werkzeug.FileStorage)):
             raise AdaptationError
         return value
-
--- a/MoinMoin/util/interwiki.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/interwiki.py	Mon Jun 25 12:03:12 2012 +0200
@@ -203,4 +203,3 @@
             parser = InterWikiMap(f.read())
 
         return parser
-
--- a/MoinMoin/util/iri.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/iri.py	Mon Jun 25 12:03:12 2012 +0200
@@ -700,4 +700,3 @@
 
 class IriFragment(_Value):
     quote_filter = frozenset('@:/?')
-
--- a/MoinMoin/util/lock.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/lock.py	Mon Jun 25 12:03:12 2012 +0200
@@ -401,4 +401,3 @@
             return WriteLock.expire(self)
         else: # POSIX
             return True
-
--- a/MoinMoin/util/mime.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/mime.py	Mon Jun 25 12:03:12 2012 +0200
@@ -137,4 +137,3 @@
 
 # Generic types, text type
 type_text_plain = Type(type='text', subtype='plain')
-
--- a/MoinMoin/util/mimetype.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/mimetype.py	Mon Jun 25 12:03:12 2012 +0200
@@ -202,4 +202,3 @@
         yield self.raw_mimestr
         yield fragments[0]
         yield "application_octet_stream"
-
--- a/MoinMoin/util/monkeypatch.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/monkeypatch.py	Mon Jun 25 12:03:12 2012 +0200
@@ -24,4 +24,3 @@
 
 werkzeug.serving.BaseRequestHandler = BaseRequestHandler
 werkzeug.serving.WSGIRequestHandler = BaseRequestHandler
-
--- a/MoinMoin/util/paramparser.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/paramparser.py	Mon Jun 25 12:03:12 2012 +0200
@@ -723,4 +723,3 @@
             raise ValueError(_(u'No argument named "%(name)s"', name=kwargs_to_pass.keys()[0]))
 
     return function(*fixed_args, **kwargs)
-
--- a/MoinMoin/util/plugins.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/plugins.py	Mon Jun 25 12:03:12 2012 +0200
@@ -236,4 +236,3 @@
     'err': str(err),
 }
         raise error.ConfigurationError(msg)
-
--- a/MoinMoin/util/profile.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/profile.py	Mon Jun 25 12:03:12 2012 +0200
@@ -180,4 +180,3 @@
 if __name__ == '__main__':
     # In case someone try to run as a script
     print __doc__
-
--- a/MoinMoin/util/pysupport.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/pysupport.py	Mon Jun 25 12:03:12 2012 +0200
@@ -139,4 +139,3 @@
             lock.release()
 
     return decorated
-
--- a/MoinMoin/util/registry.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/registry.py	Mon Jun 25 12:03:12 2012 +0200
@@ -88,4 +88,3 @@
         :param factory: Factory to register. Callable, have to return a class
         """
         return self._register(self.Entry(factory, priority))
-
--- a/MoinMoin/util/send_file.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/send_file.py	Mon Jun 25 12:03:12 2012 +0200
@@ -184,4 +184,3 @@
             if rv.status_code == 304:
                 rv.headers.pop('x-sendfile', None)
     return rv
-
--- a/MoinMoin/util/thread_monitor.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/thread_monitor.py	Mon Jun 25 12:03:12 2012 +0200
@@ -65,4 +65,3 @@
 activate_hook = mon.activate_hook
 trigger_dump = mon.trigger_dump
 hook_enabled = mon.hook_enabled
-
--- a/MoinMoin/util/tree.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/tree.py	Mon Jun 25 12:03:12 2012 +0200
@@ -69,4 +69,3 @@
 xlink = Namespace('http://www.w3.org/1999/xlink')
 docbook = Namespace('http://docbook.org/ns/docbook')
 xml = Namespace('http://www.w3.org/XML/1998/namespace')
-
--- a/MoinMoin/util/version.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/util/version.py	Mon Jun 25 12:03:12 2012 +0200
@@ -64,4 +64,3 @@
         if self.additional != 'd0':
             version_str += self.additional
         return version_str
-
--- a/MoinMoin/wikiutil.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/MoinMoin/wikiutil.py	Mon Jun 25 12:03:12 2012 +0200
@@ -345,4 +345,3 @@
         if content_length is not None:
             headers.append(('Content-Length', str(content_length)))
         return headers
-
--- a/contrib/pep8/DeleteTrailingSpaces.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/contrib/pep8/DeleteTrailingSpaces.py	Mon Jun 25 12:03:12 2012 +0200
@@ -5,7 +5,7 @@
 """
 Detect and correct violations of the moin2 coding standards:
     - no trailing blanks
-    - blank line at file end
+    - exactly one linefeed at file end, see PEP8
     - DOS line endings on .bat files, unix line endings everywhere else
 
 Execute this script from the root directory of the moin2 repository or
@@ -17,9 +17,12 @@
 warnings.simplefilter("once")
 
 # file types to be processed
-selected_suffixes = "py bat html css js".split()
+SELECTED_SUFFIXES = set("py bat cmd html css js".split())
 
-# directories to ignore
+# stuff considered DOS/WIN
+WIN_SUFFIXES = set("bat cmd".split())
+
+
 def directories_to_ignore(starting_dir):
     """Return a list of directories that will not be processed."""
     # list format: [(fully qualified directory name, sub-directory name), ... ]
@@ -27,15 +30,16 @@
     level2_dirs = ".hg contrib dlc docs env moin.egg-info wiki".split()
     for dir in level2_dirs:
         ignore_dirs.append((starting_dir, dir))
-    ignore_dirs.append((starting_dir + os.sep + "MoinMoin",  "translations"))
+    ignore_dirs.append((starting_dir + os.sep + "MoinMoin", "translations"))
     return ignore_dirs
 
 
 def check_files(filename, suffix):
     """Delete trailing blanks,
-        force blank line at file end,
+        force a single linefeed at file end,
         force line ending to be \r\n for bat files and \n for all others."""
-    if suffix.lower() == "bat":
+    suffix = suffix.lower()
+    if suffix in WIN_SUFFIXES:
         line_end = "\r\n"
     else:
         line_end = "\n"
@@ -43,22 +47,25 @@
     with open(filename, "rb") as f:
         lines = f.readlines()
 
+    # now look at file end and get rid of all whitespace-only lines there:
+    while lines:
+        if not lines[-1].strip():
+            del lines[-1]
+        else:
+            break
+
     with open(filename, "wb") as f:
         for line in lines:
             pep8_line = line.rstrip() + line_end
             f.write(pep8_line)
             # if line was changed, issue warning once for each type of change
-            if suffix == "bat" and not line.endswith("\r\n"):
+            if suffix in WIN_SUFFIXES and not line.endswith("\r\n"):
                 warnings.warn("%s was changed to DOS line endings" % filename)
-            elif suffix != "bat" and line.endswith("\r\n"):
+            elif suffix not in WIN_SUFFIXES and line.endswith("\r\n"):
                 warnings.warn("%s was changed to Unix line endings" % filename)
             elif pep8_line != line:
                 warnings.warn("%s was changed to remove trailing blanks" % filename)
 
-        # add blank line at end of file if needed
-        if lines and pep8_line != line_end:
-            f.write(line_end)
-            warnings.warn("%s was changed to add blank line to end of file" % filename)
 
 def file_picker(starting_dir):
     """Select target files and pass each to file checker."""
@@ -72,13 +79,16 @@
         # check files with selected suffixes
         for file in files:
             suffix = file.split(".")[-1]
-            if suffix in selected_suffixes:
+            if suffix in SELECTED_SUFFIXES:
                 filename = os.path.join(root, file)
                 check_files(filename, suffix)
 
+
 if __name__ == "__main__":
-    starting_dir = os.path.abspath(os.path.dirname(__file__))
-    starting_dir = starting_dir.split(os.sep + 'contrib')[0]
+    if len(sys.argv) > 1:
+        starting_dir = os.path.abspath(sys.argv[1])
+    else:
+        starting_dir = os.path.abspath(os.path.dirname(__file__))
+        starting_dir = starting_dir.split(os.sep + 'contrib')[0]
     warnings.warn("%s is starting directory" % starting_dir)
     file_picker(starting_dir)
-
--- a/contrib/wsgi/print_hotshot_profile.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/contrib/wsgi/print_hotshot_profile.py	Mon Jun 25 12:03:12 2012 +0200
@@ -36,4 +36,3 @@
 
 if __name__ == "__main__":
     run()
-
--- a/contrib/wsgi/proxy.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/contrib/wsgi/proxy.py	Mon Jun 25 12:03:12 2012 +0200
@@ -1,6 +1,6 @@
 """
     WSGI Middleware for running WSGI apps behind proxies.
-    
+
     Analyzes HTTP-X-Forwarded-For header and uses the address our outermost
     trusted proxy is seeing as REMOTE_ADDR.
 
@@ -34,4 +34,3 @@
         else:
             del environ['REMOTE_ADDR']
         return self.app(environ, start_response)
-
--- a/docs/devel/development.rst	Sun Jun 24 19:38:42 2012 +0200
+++ b/docs/devel/development.rst	Mon Jun 25 12:03:12 2012 +0200
@@ -189,9 +189,11 @@
 To run the tests, activate your virtual env and invoke py.test from the
 toplevel directory::
 
-    py.test  # run all tests
+    make test  # easiest way (all tests, pep8, skipped info)
+    py.test --pep8  # run all tests, including pep8 checks
     py.test -rs  # run all tests and outputs information about skipped tests
     py.test -k somekeyword  # run the tests matching somekeyword only
+    py.test --pep8 -k pep8  # runs pep8 checks only
     py.test sometests.py  # run the tests contained in sometests.py
 
 Tests output
@@ -211,8 +213,7 @@
 Writing tests with `py.test` is easy and has little overhead. Just
 use the `assert` statements.
 
-For more information, please read http://pytest.org/, but keep in
-mind that we currently still use **py.test 1.3.4**.
+For more information, please read: http://pytest.org/
 
 Documentation
 =============
--- a/quickinstall.bat	Sun Jun 24 19:38:42 2012 +0200
+++ b/quickinstall.bat	Mon Jun 25 12:03:12 2012 +0200
@@ -17,4 +17,3 @@
 
 echo Compiling translations (not required if wiki is English only) ...
 python setup.py compile_catalog --statistics
-
--- a/setup.cfg	Sun Jun 24 19:38:42 2012 +0200
+++ b/setup.cfg	Mon Jun 25 12:03:12 2012 +0200
@@ -42,3 +42,16 @@
 [pytest]
 norecursedirs = .hg _build tmp* env* dlc wiki
 minversion = 2.0
+pep8ignore =
+ *.py E121 E122 E123 E124 E125 E126 E127 E128  # continuation line indentation
+ *.py E225  # missing whitespace around operator
+ *.py E261  # less than 2 blanks before inline comment
+ *.py E301 E302  # separate toplevel definitions with 2 empty lines, method defs inside class by 1 empty line
+ *.py E401  # imports on separate lines
+ *.py E501  # maximum line length (default 79 chars)
+ upload.py ALL  # 3rd party (and not in the repo): rietveld upload tool
+ wikiconfig_*.py ALL  # local stuff, not in the repo
+ docs/conf.py ALL  # sphinx stuff, automatically generated, don't check this
+ MoinMoin/util/md5crypt.py ALL  # 3rd party stuff, don't check this
+ MoinMoin/util/_tests/test_paramparser.py E241 # whitespace around comma (we have some "tabular" formatting there)
+
--- a/setup.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/setup.py	Mon Jun 25 12:03:12 2012 +0200
@@ -72,7 +72,7 @@
                  },
     include_package_data=True,
     zip_safe=False,
-    dependency_links = [
+    dependency_links=[
         #'https://github.com/mitsuhiko/werkzeug/tarball/master#egg=Werkzeug-0.7dev',
         'https://bitbucket.org/thomaswaldmann/whoosh/get/2.4x.tar.gz#egg=Whoosh-2.4.99dev',
         # fixed flask-themes, 0.1.3 does not work for flask 0.8.x, thus we use a faked 0.1.3.1:
@@ -93,7 +93,7 @@
         'pygments>=1.4', # src code / text file highlighting
         'Werkzeug>=0.8.1', # wsgi toolkit
         'pytest>=2.1', # pytest is needed by unit tests
-        'pep8', # pep8 style checker is needed by unit tests
+        'pytest-pep8', # coding style checker
         'whoosh>=2.4.0', # needed for indexed search
         'sphinx>=1.1', # needed to build the docs
         'pdfminer', # pdf -> text/plain conversion
@@ -108,7 +108,7 @@
         'XStatic-multiDownload>=20110717.1',
     ],
     # optional features and their list of requirements
-    extras_require = {
+    extras_require={
         #'featurename': ["req1", "req2", ],
         'pil': ["PIL"], # used by image get for scaling/rotating/etc.
                         # PIL is a binary dependency and some features of it
@@ -118,12 +118,12 @@
         'openid': ["python-openid>=2.2.4"], # used by openid rp auth
         'sqla': ["sqlalchemy>=0.7.1"], # used by sqla store
     },
-    entry_points = dict(
-        console_scripts = ['moin = MoinMoin.script:main'],
+    entry_points=dict(
+        console_scripts=['moin = MoinMoin.script:main'],
     ),
 
     # stuff for babel:
-    message_extractors = {
+    message_extractors={
         '': [
             ('MoinMoin/templates/**.html', 'jinja2', None),
             ('MoinMoin/apps/**/templates/**.html', 'jinja2', None),
@@ -137,4 +137,3 @@
 
 if __name__ == '__main__':
     setup(**setup_args)
-
--- a/wikiconfig.py	Sun Jun 24 19:38:42 2012 +0200
+++ b/wikiconfig.py	Mon Jun 25 12:03:12 2012 +0200
@@ -57,7 +57,7 @@
 
     # setup static files' serving:
     serve_files = dict(
-        docs = os.path.join(wikiconfig_dir, 'docs', '_build', 'html'),  # html docs made by sphinx
+        docs=os.path.join(wikiconfig_dir, 'docs', '_build', 'html'),  # html docs made by sphinx
     )
     # see https://bitbucket.org/thomaswaldmann/xstatic for infos about xstatic:
     from xstatic.main import XStatic
@@ -101,4 +101,3 @@
 #
 #MOINCFG = LocalConfig
 #DEBUG = True
-