[PATCH 3 of 3] notify: mime-encode messages
Christian Ebert
blacktrash at gmx.net
Thu Sep 11 01:44:39 UTC 2008
# HG changeset patch
# User Christian Ebert <blacktrash at gmx.net>
# Date 1215886338 -3600
# Node ID 9c9f6038ad7ba532e488537e373624b2cf570a4d
# Parent a2ec13cc036f525c31d8c47620291b90d7e1f108
notify: mime-encode messages
- addresses will be encoded in utf-8 if containing non-ascii
- message bodies will also be encoded as we are not sending
patches that are meant to be applied
- update test output
- adapt test-keyword to ignore the new headers
diff --git a/hgext/notify.py b/hgext/notify.py
--- a/hgext/notify.py
+++ b/hgext/notify.py
@@ -156,7 +156,8 @@
if fnmatch.fnmatch(self.repo.root, pat):
for user in users.split(','):
subs[self.fixmail(user)] = 1
- return util.sort(subs)
+ subs = util.sort(subs)
+ return [mail.addressencode(self.ui, s) for s in subs]
def url(self, path=None):
return self.ui.config('web', 'baseurl') + (path or self.root)
@@ -180,10 +181,16 @@
p = email.Parser.Parser()
msg = p.parsestr(data)
- def fix_subject():
+ # store sender and subject
+ sender, subject = msg['From'], msg['Subject']
+ # create fresh mime message from msg body
+ text = msg.get_payload()
+ # for notification prefer readability over data precision
+ msg = mail.mimeencode(self.ui, text)
+
+ def fix_subject(subject):
'''try to make subject line exist and be useful.'''
- subject = msg['Subject']
if not subject:
if count > 1:
subject = _('%s: %d new changesets') % (self.root, count)
@@ -194,23 +201,20 @@
maxsubject = int(self.ui.config('notify', 'maxsubject', 67))
if maxsubject and len(subject) > maxsubject:
subject = subject[:maxsubject-3] + '...'
- del msg['Subject']
- msg['Subject'] = subject
+ msg['Subject'] = mail.headencode(self.ui, subject)
- def fix_sender():
+ def fix_sender(sender):
'''try to make message have proper sender.'''
- sender = msg['From']
if not sender:
sender = self.ui.config('email', 'from') or self.ui.username()
if '@' not in sender or '@localhost' in sender:
sender = self.fixmail(sender)
- del msg['From']
- msg['From'] = sender
+ msg['From'] = mail.addressencode(self.ui, sender)
msg['Date'] = util.datestr(format="%a, %d %b %Y %H:%M:%S %1%2")
- fix_subject()
- fix_sender()
+ fix_subject(subject)
+ fix_sender(sender)
msg['X-Hg-Notification'] = 'changeset ' + short(node)
if not msg['Message-Id']:
diff --git a/tests/test-keyword b/tests/test-keyword
--- a/tests/test-keyword
+++ b/tests/test-keyword
@@ -104,7 +104,7 @@
EOF
echo % pull from bundle
-hg pull -u ../kw.hg 2>&1 | sed -e '/^Date:/,/^diffs (/ d'
+hg pull -u ../kw.hg 2>&1 | sed -e '/^Content-Type:/,/^diffs (/ d'
echo % remove notify config
sed -e '/\[hooks\]/,$ d' $HGRCPATH > $HGRCPATH.nonotify
diff --git a/tests/test-notify.out b/tests/test-notify.out
--- a/tests/test-notify.out
+++ b/tests/test-notify.out
@@ -14,6 +14,9 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
Date:
Subject: changeset in test-notify/b: b
From: test
@@ -45,6 +48,9 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
Date:
Subject: b
From: test at test.com
More information about the Mercurial-devel
mailing list