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