From 8303af92996915abbb3af81369e3b0add8b7cb4f Mon Sep 17 00:00:00 2001
From: Eygene Ryabinkin <rea@codelabs.ru>
Date: Mon, 15 Sep 2008 22:04:47 +0400
Subject: [PATCH] Implement VCS-like commit messages.

This patch enables MoinMoin to send commit mails for every change
of every Wiki page: the Wiki-wide changes subscription.  Patch is
based on the ASF's work [1]: it is sligtly modified to work for
1.6.1 and additional configuration directive, commit_mail_fancy_diff,
was added.

[1] http://moinmo.in/MoinMoinPatch/CommitMails

Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
---
 MoinMoin/Page.py               |   24 ++++++++++++++++++++++++
 MoinMoin/config/multiconfig.py |    5 +++++
 wiki/config/wikiconfig.py      |   15 +++++++++++++++
 3 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/MoinMoin/Page.py b/MoinMoin/Page.py
index 7727cea..07de32d 100644
--- a/MoinMoin/Page.py
+++ b/MoinMoin/Page.py
@@ -807,6 +807,25 @@ class Page(object):
 
         return link
 
+    def _addMailingListSubscriber(self, subscriber_list, request, return_users):
+        """
+        Create a "bogus" user for a change notification mailing list.
+        """
+        if not return_users:
+            subscriber_list.append(self.cfg.mail_to_address)
+        else:
+            name = self.cfg.commit_mail_to_name or ""
+            subscriber = user.User(request,
+                         name="commit_mailer", auth_username=name)
+            subscriber.email = self.cfg.commit_mail_to_address
+            subscriber.trusted = 0
+            subscriber.language = self.cfg.language_default
+            subscriber.subscribed_pages = [".*"]
+            subscriber.show_fancy_diff = self.cfg.commit_mail_fancy_diff
+            subscriber.want_trivial = 1
+            subscriber.remember_me = 0
+            subscriber_list.append(subscriber)
+
     def getSubscribers(self, request, **kw):
         """ Get all subscribers of this page.
 
@@ -868,6 +887,11 @@ class Page(object):
             else:
                 subscriber_list[lang].append(subscriber.email)
 
+        # send cvs-style commit messages please
+        if not subscriber_list.has_key('en'): subscriber_list['en'] = []
+        if getattr(self.cfg, "cvs_style_commit_messages", None):
+                self._addMailingListSubscriber(subscriber_list['en'], request, return_users)
+
         return subscriber_list
 
     def parse_processing_instructions(self):
diff --git a/MoinMoin/config/multiconfig.py b/MoinMoin/config/multiconfig.py
index 80e27c1..1e3ee5a 100644
--- a/MoinMoin/config/multiconfig.py
+++ b/MoinMoin/config/multiconfig.py
@@ -379,6 +379,11 @@ Lists: * bullets; 1., a. numbered items.
     mail_smarthost = None # your SMTP mail server
     mail_sendmail = None # "/usr/sbin/sendmail -t -i" to not use SMTP, but sendmail
 
+    cvs_style_commit_messages = 0
+    commit_mail_to_name = None
+    commit_mail_to_address = None
+    commit_mail_fancy_diff = 0
+
     mail_import_secret = "" # a shared secret also known to the mail importer xmlrpc script
     mail_import_subpage_template = u"$from-$date-$subject" # used for mail import
     mail_import_pagename_search = ['subject', 'to', ] # where to look for target pagename (and in which order)
diff --git a/wiki/config/wikiconfig.py b/wiki/config/wikiconfig.py
index 20b90f4..f702df2 100644
--- a/wiki/config/wikiconfig.py
+++ b/wiki/config/wikiconfig.py
@@ -124,6 +124,21 @@ class Config(DefaultConfig):
     # Default is to use 'mail_from' as a To: field contents.
     #mail_expand_to = False
 
+    # Send CVS-style commit messages for every change, as an anti-spam
+    # measure?  Off by default, set to 1 to enable
+    #cvs_style_commit_messages = 0
+
+    # The name to use in the To line of CVS-style commit messages,
+    # e.g. u"Jürgen Wiki" [Unicode]
+    #commit_mail_to_name = u""
+
+    # The address to send CVS-style commit messages to, e.g.
+    # "<allcommits@mywiki.org>"
+    #commit_mail_to_address = ""
+
+    # Use fancy diffs or the plain ones?
+    #commit_mail_fancy_diff = False
+
 
     # User interface ----------------------------------------------------
 
-- 
1.5.6.4

