[PATCH] Make patchbomb extension honor global encoding setting.
Wesley J. Landaker
wjl at icecavern.net
Sat Jul 14 11:50:55 CDT 2007
# HG changeset patch
# User Wesley J. Landaker <wjl at icecavern.net>
# Date 1184431830 21600
# Node ID a0eba83e2d9c5cd5c8e669ed8496c595e6136236
# Parent 28b23b9073a8652f95b87975f6648912dfec5f71
Make patchbomb extension honor global encoding setting.
Currently the patchbomb extension does not honor the global encoding
setting, using neither the default, nor honoring the --encoding option.
Instead, it always generates emails and patches using us-ascii. This
obviously works 90% of the time, but isn't correct, and breaks things
whenever people's names, logs of the changesets, etc are in the default
encoding (e.g. usually UTF-8 by default).
This patch makes patchbomb use the global encoding used everywhere else
in mercurial. Because things were broken for all encodings previously,
and the default mercurial encoding is a superset of us-ascii, this does
not have any backwards compatibility issues.
diff -r 28b23b9073a8 -r a0eba83e2d9c hgext/patchbomb.py
--- a/hgext/patchbomb.py Fri Jul 13 08:28:57 2007 -0700
+++ b/hgext/patchbomb.py Sat Jul 14 10:50:30 2007 -0600
@@ -65,7 +65,7 @@
# That should be all. Now your patchbomb is on its way out.
import os, errno, socket, tempfile
-import email.MIMEMultipart, email.MIMEText, email.MIMEBase
+import email.MIMEMultipart, email.MIMEText, email.MIMEBase, email.Charset
import email.Utils, email.Encoders
from mercurial import cmdutil, commands, hg, mail, ui, patch, util
from mercurial.i18n import _
@@ -161,6 +161,11 @@ def patchbomb(ui, repo, *revs, **opts):
# 'Patch subject is complete summary.')
#body += '\n\n\n'
+ # always use raw encoding if we are previewing to the screen
+ # to make it easier to manually review without a mail client
+ if opts['test']:
+ email.Charset.add_charset(util._encoding.lower(), None, None)
+
if opts['plain']:
while patch and patch[0].startswith('# '): patch.pop(0)
if patch: patch.pop(0)
@@ -169,8 +174,10 @@ def patchbomb(ui, repo, *revs, **opts):
body += cdiffstat('\n'.join(desc), patch) + '\n\n'
if opts['attach']:
msg = email.MIMEMultipart.MIMEMultipart()
- if body: msg.attach(email.MIMEText.MIMEText(body, 'plain'))
- p = email.MIMEText.MIMEText('\n'.join(patch), 'x-patch')
+ if body:
+ msg.attach(email.MIMEText.MIMEText(body, 'plain', util._encoding))
+ msg.set_charset(charset)
+ p = email.MIMEText.MIMEText('\n'.join(patch), 'x-patch', util._encoding)
binnode = bin(node)
# if node is mq patch, it will have patch file name as tag
patchname = [t for t in repo.nodetags(binnode)
@@ -186,7 +193,7 @@ def patchbomb(ui, repo, *revs, **opts):
msg.attach(p)
else:
body += '\n'.join(patch)
- msg = email.MIMEText.MIMEText(body)
+ msg = email.MIMEText.MIMEText(body, 'plain', util._encoding)
subj = desc[0].strip().rstrip('. ')
if total == 1:
More information about the Mercurial-devel
mailing list