Rev 6460: (jelmer) Use config stacks for 'mail_client' configuration option. (Jelmer in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
Patch Queue Manager
pqm at pqm.ubuntu.com
Thu Feb 2 12:39:19 UTC 2012
At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 6460 [merge]
revision-id: pqm at pqm.ubuntu.com-20120202123918-18gyztydwlr8jys6
parent: pqm at pqm.ubuntu.com-20120201160040-l2dbtwmyo490cc7b
parent: jelmer at samba.org-20120202121004-22bp3tj7yp8xhr3t
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2012-02-02 12:39:18 +0000
message:
(jelmer) Use config stacks for 'mail_client' configuration option. (Jelmer
Vernooij)
modified:
bzrlib/config.py config.py-20051011043216-070c74f4e9e338e8
bzrlib/errors.py errors.py-20050309040759-20512168c4e14fbd
bzrlib/mail_client.py mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
bzrlib/send.py send.py-20090521192735-j7cdb33ykmtmzx4w-1
bzrlib/tests/blackbox/test_send.py test_bundle.py-20060616222707-c21c8b7ea5ef57b1
bzrlib/tests/test_config.py testconfig.py-20051011041908-742d0c15d8d8c8eb
doc/en/release-notes/bzr-2.6.txt bzr2.6.txt-20120116134316-8w1xxom1c7vcu1t5-1
=== modified file 'bzrlib/config.py'
--- a/bzrlib/config.py 2012-01-28 17:58:09 +0000
+++ b/bzrlib/config.py 2012-02-01 19:53:08 +0000
@@ -92,7 +92,6 @@
lazy_regex,
library_state,
lockdir,
- mail_client,
mergetools,
osutils,
symbol_versioning,
@@ -240,16 +239,6 @@
return diff.DiffFromTool.from_string(cmd, old_tree, new_tree,
sys.stdout)
- def get_mail_client(self):
- """Get a mail client to use"""
- selected_client = self.get_user_option('mail_client')
- _registry = mail_client.mail_client_registry
- try:
- mail_client_class = _registry.get(selected_client)
- except KeyError:
- raise errors.UnknownMailClient(selected_client)
- return mail_client_class(self)
-
def _get_signature_checking(self):
"""Template method to override signature checking policy."""
@@ -2803,6 +2792,8 @@
Standard log formats are ``long``, ``short`` and ``line``. Additional formats
may be provided by plugins.
'''))
+option_registry.register_lazy('mail_client', 'bzrlib.mail_client',
+ 'opt_mail_client')
option_registry.register(
Option('output_encoding',
help= 'Unicode encoding for output'
=== modified file 'bzrlib/errors.py'
--- a/bzrlib/errors.py 2012-01-31 18:25:57 +0000
+++ b/bzrlib/errors.py 2012-02-02 12:10:04 +0000
@@ -2768,14 +2768,6 @@
_fmt = "No mail-to address (--mail-to) or output (-o) specified."
-class UnknownMailClient(BzrError):
-
- _fmt = "Unknown mail client: %(mail_client)s"
-
- def __init__(self, mail_client):
- BzrError.__init__(self, mail_client=mail_client)
-
-
class MailClientNotFound(BzrError):
_fmt = "Unable to find mail client with the following names:"\
=== modified file 'bzrlib/mail_client.py'
--- a/bzrlib/mail_client.py 2011-12-19 10:58:39 +0000
+++ b/bzrlib/mail_client.py 2012-02-01 19:55:27 +0000
@@ -24,6 +24,7 @@
import bzrlib
from bzrlib import (
+ config as _mod_config,
email_message,
errors,
msgeditor,
@@ -111,7 +112,7 @@
if body == '':
raise errors.NoMessageSupplied()
email_message.EmailMessage.send(self.config,
- self.config.username(),
+ self.config.get('email'),
to,
subject,
body,
@@ -378,7 +379,7 @@
extension, body=None, from_=None):
"""See ExternalMailClient._compose"""
if from_ is None:
- from_ = self.config.get_user_option('email')
+ from_ = self.config.get('email')
super(Claws, self)._compose(prompt, to, subject, attach_path,
mime_subtype, extension, body, from_)
@@ -617,11 +618,11 @@
"""See MailClient.compose"""
try:
return self._mail_client().compose(prompt, to, subject,
- attachment, mimie_subtype,
+ attachment, mime_subtype,
extension, basename, body)
except errors.MailClientNotFound:
return Editor(self.config).compose(prompt, to, subject,
- attachment, mimie_subtype, extension, body)
+ attachment, mime_subtype, extension, body)
def compose_merge_request(self, to, subject, directive, basename=None,
body=None):
@@ -636,4 +637,5 @@
help=DefaultMail.__doc__)
mail_client_registry.default_key = 'default'
-
+opt_mail_client = _mod_config.RegistryOption('mail_client',
+ mail_client_registry, help='E-mail client to use.', invalid='error')
=== modified file 'bzrlib/send.py'
--- a/bzrlib/send.py 2012-01-25 15:53:18 +0000
+++ b/bzrlib/send.py 2012-02-01 19:18:09 +0000
@@ -49,9 +49,10 @@
branch.lock_write()
try:
if output is None:
+ config_stack = branch.get_config_stack()
if mail_to is None:
- mail_to = branch.get_config_stack().get('submit_to')
- mail_client = branch.get_config().get_mail_client()
+ mail_to = config_stack.get('submit_to')
+ mail_client = config_stack.get('mail_client')(config_stack)
if (not getattr(mail_client, 'supports_body', False)
and body is not None):
raise errors.BzrCommandError(gettext(
=== modified file 'bzrlib/tests/blackbox/test_send.py'
--- a/bzrlib/tests/blackbox/test_send.py 2012-01-25 15:53:18 +0000
+++ b/bzrlib/tests/blackbox/test_send.py 2012-02-01 19:55:27 +0000
@@ -193,25 +193,26 @@
def test_mailto_option(self):
b = branch.Branch.open('branch')
- b.get_config().set_user_option('mail_client', 'editor')
+ b.get_config_stack().set('mail_client', 'editor')
self.run_bzr_error(
('No mail-to address \\(--mail-to\\) or output \\(-o\\) specified',
), 'send -f branch')
- b.get_config().set_user_option('mail_client', 'bogus')
+ b.get_config_stack().set('mail_client', 'bogus')
self.run_send([])
- self.run_bzr_error(('Unknown mail client: bogus',),
+ self.run_bzr_error(('Bad value "bogus" for option "mail_client"',),
'send -f branch --mail-to jrandom at example.org')
b.get_config_stack().set('submit_to', 'jrandom at example.org')
- self.run_bzr_error(('Unknown mail client: bogus',),
+ self.run_bzr_error(('Bad value "bogus" for option "mail_client"',),
'send -f branch')
def test_mailto_child_option(self):
"""Make sure that child_submit_to is used."""
b = branch.Branch.open('branch')
- b.get_config().set_user_option('mail_client', 'bogus')
+ b.get_config_stack().set('mail_client', 'bogus')
parent = branch.Branch.open('parent')
parent.get_config_stack().set('child_submit_to', 'somebody at example.org')
- self.run_bzr_error(('Unknown mail client: bogus',), 'send -f branch')
+ self.run_bzr_error(('Bad value "bogus" for option "mail_client"',),
+ 'send -f branch')
def test_format(self):
md = self.get_MD(['--format=4'])
=== modified file 'bzrlib/tests/test_config.py'
--- a/bzrlib/tests/test_config.py 2012-01-27 21:25:21 +0000
+++ b/bzrlib/tests/test_config.py 2012-02-02 12:08:35 +0000
@@ -1904,48 +1904,6 @@
location='http://example.com/specific')
self.assertEqual(my_config.get_user_option('option'), 'exact')
- def test_get_mail_client(self):
- config = self.get_branch_config()
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.DefaultMail)
-
- # Specific clients
- config.set_user_option('mail_client', 'evolution')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.Evolution)
-
- config.set_user_option('mail_client', 'kmail')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.KMail)
-
- config.set_user_option('mail_client', 'mutt')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.Mutt)
-
- config.set_user_option('mail_client', 'thunderbird')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.Thunderbird)
-
- # Generic options
- config.set_user_option('mail_client', 'default')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.DefaultMail)
-
- config.set_user_option('mail_client', 'editor')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.Editor)
-
- config.set_user_option('mail_client', 'mapi')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.MAPIClient)
-
- config.set_user_option('mail_client', 'xdg-email')
- client = config.get_mail_client()
- self.assertIsInstance(client, mail_client.XDGEmail)
-
- config.set_user_option('mail_client', 'firebird')
- self.assertRaises(errors.UnknownMailClient, config.get_mail_client)
-
class TestMailAddressExtraction(tests.TestCase):
@@ -4889,3 +4847,56 @@
self.overrideEnv('BZR_EMAIL', None)
self.overrideEnv('EMAIL', 'jelmer at samba.org')
self.assertEquals('jelmer at debian.org', conf.get('email'))
+
+
+class MailClientOptionTests(tests.TestCase):
+
+ def test_default(self):
+ conf = config.MemoryStack('')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.DefaultMail)
+
+ def test_evolution(self):
+ conf = config.MemoryStack('mail_client=evolution')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.Evolution)
+
+ def test_kmail(self):
+ conf = config.MemoryStack('mail_client=kmail')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.KMail)
+
+ def test_mutt(self):
+ conf = config.MemoryStack('mail_client=mutt')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.Mutt)
+
+ def test_thunderbird(self):
+ conf = config.MemoryStack('mail_client=thunderbird')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.Thunderbird)
+
+ def test_explicit_default(self):
+ conf = config.MemoryStack('mail_client=default')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.DefaultMail)
+
+ def test_editor(self):
+ conf = config.MemoryStack('mail_client=editor')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.Editor)
+
+ def test_mapi(self):
+ conf = config.MemoryStack('mail_client=mapi')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.MAPIClient)
+
+ def test_xdg_email(self):
+ conf = config.MemoryStack('mail_client=xdg-email')
+ client = conf.get('mail_client')
+ self.assertIs(client, mail_client.XDGEmail)
+
+ def test_unknown(self):
+ conf = config.MemoryStack('mail_client=firebird')
+ self.assertRaises(errors.ConfigOptionValueError, conf.get,
+ 'mail_client')
=== modified file 'doc/en/release-notes/bzr-2.6.txt'
--- a/doc/en/release-notes/bzr-2.6.txt 2012-01-27 21:11:36 +0000
+++ b/doc/en/release-notes/bzr-2.6.txt 2012-01-27 21:28:56 +0000
@@ -52,6 +52,9 @@
or tuples of bytestrings.
(Jelmer Vernooij)
+* ``mail_client`` now accepts a configuration stack object rather than
+ an old style Config object. (Jelmer Vernooij)
+
* New configuration option class ``RegistryOption`` which is backed
onto a registry. (Jelmer Vernooij)
More information about the bazaar-commits
mailing list