Dsactivation de l'chappement des caractres 8bits dans darcs.

On utilise DARCS_DONT_ESCAPE_8BIT pour dire a darcs de ne pas echapper
les caracteres 8bits.

darcs-hash:20071209012351-af139-d8602216488842929727d3607c1827cacd27ded2.gz
This commit is contained in:
Jeremie Dimino 2007-12-09 02:23:51 +01:00
parent 4c1a71477a
commit 093598cd46

View file

@ -25,7 +25,7 @@
Envoie un mail détaillant le dernier patch appliqué à un dépot. Envoie un mail détaillant le dernier patch appliqué à un dépot.
""" """
import commands, os, sys, email, re, cStringIO import commands, os, sys, email
try: try:
from lxml import etree from lxml import etree
@ -40,7 +40,7 @@ from unicode2ascii import unicode2ascii
def darcs(args): def darcs(args):
""" Invoque darcs et renvoie sa sortie. """ """ Invoque darcs et renvoie sa sortie. """
return commands.getoutput("darcs " + args) return commands.getoutput("env DARCS_DONT_ESCAPE_8BIT=1 darcs " + args)
def get_patch_properties(): def get_patch_properties():
""" Récupère les informations a propos du dernier patch. """ """ Récupère les informations a propos du dernier patch. """
@ -54,8 +54,8 @@ def get_patch_properties():
'shortrepo': os.path.basename(cwd), 'shortrepo': os.path.basename(cwd),
'date': prop.attrib['local_date'], 'date': prop.attrib['local_date'],
'hash': prop.attrib['hash'], 'hash': prop.attrib['hash'],
'name': prop.findtext('name'), 'name': prop.findtext('name').encode("UTF-8"),
'comment': prop.findtext('comment'), 'comment': prop.findtext('comment').encode("UTF-8"),
'diff': diff, 'diff': diff,
'changes': darcs("changes --match='hash %s' --summary" % hash) } 'changes': darcs("changes --match='hash %s' --summary" % hash) }
@ -69,20 +69,6 @@ Subject: Darcs record (%(shortrepo)s): %(name)s
""" """
TEMPLATE_FILE = "_darcs/third-party/darcs-send-changes/email-template" TEMPLATE_FILE = "_darcs/third-party/darcs-send-changes/email-template"
__darcs_escaped_re = re.compile('\\[_\\\\[0-9a-f][0-9a-f]_\\]')
def darcs_unescape(str):
""" Converti les séquences d'échappement de darcs en charactère unicode. """
start = 0
newstr = cStringIO.StringIO()
s = __darcs_escaped_re.search(str, start)
while s:
newstr.write(str[start:s.start()])
newstr.write(chr(int(str[s.start()+3:s.start()+5], 16)))
start = s.end()
s = __darcs_escaped_re.search(str, start)
newstr.write(str[start:])
return newstr.getvalue()
def send_changes(smtp, recipient, patch_props, template=DEFAULT_TEMPLATE): def send_changes(smtp, recipient, patch_props, template=DEFAULT_TEMPLATE):
""" Formatte et envoie un mail avec les modifications sur le dernier """ Formatte et envoie un mail avec les modifications sur le dernier
patch appliqué au dépot. patch appliqué au dépot.
@ -100,8 +86,7 @@ peut contenir les variables suivantes:
si template est None, DEFAULT_TEMPLATE est utilisé. si template est None, DEFAULT_TEMPLATE est utilisé.
""" """
patch_props["recipient"] = ", ".join(recipient) patch_props["recipient"] = ", ".join(recipient)
rawmail = darcs_unescape((template or DEFAULT_TEMPLATE) % patch_props) mail = email.message_from_string((template or DEFAULT_TEMPLATE) % patch_props)
mail = email.message_from_string(rawmail)
if not mail['Content-Transfer-Encoding']: if not mail['Content-Transfer-Encoding']:
mail['Content-Transfer-Encoding'] = 'quoted-printable' mail['Content-Transfer-Encoding'] = 'quoted-printable'
if not mail.get_charset(): if not mail.get_charset():