##// END OF EJS Templates
patchbomb: add --body flag to send patches as inline message body text...
patchbomb: add --body flag to send patches as inline message body text There is currently no way to make patchbomb include patches both as attachments and as inline text. This would be quite convenient when sending patches to people who use web email clients (e.g. gmail) which often mangle the patches, making them hard to apply. The default behavior of the email command is unchanged. However it is now possible to use the --body flag _in addition_ to the -i or -a flags, in which case the patchbomb emails will contain the patch as inline body text and as an attachment. A new test has been added to test-patchbomb.t ("test attach for single patch"), based on the existing test called "test attach for single patch" test.

File last commit:

r16134:3c0327ea default
r16307:17a9a1f5 default
Show More
formatter.py
71 lines | 2.4 KiB | text/x-python | PythonLexer
# formatter.py - generic output formatting for mercurial
#
# Copyright 2012 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
class baseformatter(object):
def __init__(self, ui, topic, opts):
self._ui = ui
self._topic = topic
self._style = opts.get("style")
self._template = opts.get("template")
self._item = None
def __bool__(self):
'''return False if we're not doing real templating so we can
skip extra work'''
return True
def _showitem(self):
'''show a formatted item once all data is collected'''
pass
def startitem(self):
'''begin an item in the format list'''
if self._item is not None:
self._showitem()
self._item = {}
def data(self, **data):
'''insert data into item that's not shown in default output'''
def write(self, fields, deftext, *fielddata, **opts):
'''do default text output while assigning data to item'''
for k, v in zip(fields.split(), fielddata):
self._item[k] = v
def plain(self, text, **opts):
'''show raw text for non-templated mode'''
pass
def end(self):
'''end output for the formatter'''
if self._item is not None:
self._showitem()
class plainformatter(baseformatter):
'''the default text output scheme'''
def __init__(self, ui, topic, opts):
baseformatter.__init__(self, ui, topic, opts)
def __bool__(self):
return False
def startitem(self):
pass
def data(self, **data):
pass
def write(self, fields, deftext, *fielddata, **opts):
self._ui.write(deftext % fielddata, **opts)
def plain(self, text, **opts):
self._ui.write(text, **opts)
def end(self):
pass
class debugformatter(baseformatter):
def __init__(self, ui, topic, opts):
baseformatter.__init__(self, ui, topic, opts)
self._ui.write("%s = {\n" % self._topic)
def _showitem(self):
self._ui.write(" " + repr(self._item) + ",\n")
def end(self):
baseformatter.end(self)
self._ui.write("}\n")
def formatter(ui, topic, opts):
if ui.configbool('ui', 'formatdebug'):
return debugformatter(ui, topic, opts)
return plainformatter(ui, topic, opts)