Rev 6568: (vila) AuthConfig alwaus return user/password as unicode. (Vincent Ladeuil) in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

Patch Queue Manager pqm at pqm.ubuntu.com
Wed Oct 10 18:45:21 UTC 2012


At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 6568 [merge]
revision-id: pqm at pqm.ubuntu.com-20121010184521-wzqd4ei53vnrcdnc
parent: pqm at pqm.ubuntu.com-20120928072223-m8dp02j933yp9j60
parent: v.ladeuil+lp at free.fr-20120917090656-gthx72qbn88wbmgz
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2012-10-10 18:45:21 +0000
message:
  (vila) AuthConfig alwaus return user/password as unicode. (Vincent Ladeuil)
modified:
  bzrlib/tests/test_ui.py        test_ui.py-20051130162854-458e667a7414af09
  bzrlib/ui/text.py              text.py-20051130153916-2e438cffc8afc478
  doc/en/release-notes/bzr-2.6.txt bzr2.6.txt-20120116134316-8w1xxom1c7vcu1t5-1
=== modified file 'bzrlib/tests/test_ui.py'
--- a/bzrlib/tests/test_ui.py	2012-08-02 11:45:26 +0000
+++ b/bzrlib/tests/test_ui.py	2012-09-17 09:06:56 +0000
@@ -97,28 +97,20 @@
             pb.finished()
 
     def test_text_factory_utf8_password(self):
-        """Test an utf8 password.
-
-        We can't predict what encoding users will have for stdin, so we force
-        it to utf8 to test that we transport the password correctly.
-        """
-        ui = self.make_test_ui_factory(u'baz\u1234'.encode('utf8'))
+        """Test an utf8 password."""
+        ui = _mod_ui_text.TextUIFactory(None, None, None)
+        ui.stdin = tests.StringIOWrapper(u'baz\u1234'.encode('utf8'))
+        ui.stdout = tests.StringIOWrapper()
+        ui.stderr = tests.StringIOWrapper()
         ui.stderr.encoding = ui.stdout.encoding = ui.stdin.encoding = 'utf8'
         pb = ui.nested_progress_bar()
-        try:
-            password = self.apply_redirected(ui.stdin, ui.stdout, ui.stderr,
-                                             ui.get_password,
-                                             u'Hello \u1234 %(user)s',
-                                             user=u'some\u1234')
-            # We use StringIO objects, we need to decode them
-            self.assertEqual(u'baz\u1234', password.decode('utf8'))
-            self.assertEqual(u'Hello \u1234 some\u1234: ',
-                             ui.stderr.getvalue().decode('utf8'))
-            # stdin and stdout should be empty
-            self.assertEqual('', ui.stdin.readline())
-            self.assertEqual('', ui.stdout.readline())
-        finally:
-            pb.finished()
+        password = ui.get_password(u'Hello \u1234 %(user)s', user=u'some\u1234')
+        self.assertEqual(u'baz\u1234', password)
+        self.assertEqual(u'Hello \u1234 some\u1234: ',
+                         ui.stderr.getvalue().decode('utf8'))
+        # stdin and stdout should be empty
+        self.assertEqual('', ui.stdin.readline())
+        self.assertEqual('', ui.stdout.getvalue())
 
     def test_text_ui_get_boolean(self):
         stdin = tests.StringIOWrapper("y\n" # True
@@ -270,36 +262,30 @@
             pb.finished()
 
     def test_text_ui_getusername(self):
-        factory = _mod_ui_text.TextUIFactory(None, None, None)
-        factory.stdin = tests.StringIOWrapper("someuser\n\n")
-        factory.stdout = tests.StringIOWrapper()
-        factory.stderr = tests.StringIOWrapper()
-        factory.stdout.encoding = "utf8"
-        # there is no output from the base factory
-        self.assertEqual("someuser",
-                         factory.get_username(u'Hello %(host)s', host='some'))
-        self.assertEquals("Hello some: ", factory.stderr.getvalue())
-        self.assertEquals('', factory.stdout.getvalue())
-        self.assertEqual("", factory.get_username(u"Gebruiker"))
+        ui = _mod_ui_text.TextUIFactory(None, None, None)
+        ui.stdin = tests.StringIOWrapper('someuser\n\n')
+        ui.stdout = tests.StringIOWrapper()
+        ui.stderr = tests.StringIOWrapper()
+        ui.stdout.encoding = 'utf8'
+        self.assertEqual('someuser',
+                         ui.get_username(u'Hello %(host)s', host='some'))
+        self.assertEquals('Hello some: ', ui.stderr.getvalue())
+        self.assertEquals('', ui.stdout.getvalue())
+        self.assertEqual('', ui.get_username(u"Gebruiker"))
         # stdin should be empty
-        self.assertEqual('', factory.stdin.readline())
+        self.assertEqual('', ui.stdin.readline())
 
     def test_text_ui_getusername_utf8(self):
-        ui = tests.TestUIFactory(stdin=u'someuser\u1234'.encode('utf8'),
-                                 stdout=tests.StringIOWrapper(),
-                                 stderr=tests.StringIOWrapper())
+        ui = _mod_ui_text.TextUIFactory(None, None, None)
+        ui.stdin = tests.StringIOWrapper(u'someuser\u1234'.encode('utf8'))
+        ui.stdout = tests.StringIOWrapper()
+        ui.stderr = tests.StringIOWrapper()
         ui.stderr.encoding = ui.stdout.encoding = ui.stdin.encoding = "utf8"
-        pb = ui.nested_progress_bar()
-        try:
-            # there is no output from the base factory
-            username = self.apply_redirected(ui.stdin, ui.stdout, ui.stderr,
-                ui.get_username, u'Hello\u1234 %(host)s', host=u'some\u1234')
-            self.assertEquals(u"someuser\u1234", username.decode('utf8'))
-            self.assertEquals(u"Hello\u1234 some\u1234: ",
-                              ui.stderr.getvalue().decode("utf8"))
-            self.assertEquals('', ui.stdout.getvalue())
-        finally:
-            pb.finished()
+        username = ui.get_username(u'Hello %(host)s', host=u'some\u1234')
+        self.assertEquals(u"someuser\u1234", username)
+        self.assertEquals(u"Hello some\u1234: ",
+                          ui.stderr.getvalue().decode("utf8"))
+        self.assertEquals('', ui.stdout.getvalue())
 
     def test_quietness(self):
         self.overrideEnv('BZR_PROGRESS_BAR', 'text')

=== modified file 'bzrlib/ui/text.py'
--- a/bzrlib/ui/text.py	2012-09-19 07:07:39 +0000
+++ b/bzrlib/ui/text.py	2012-10-10 18:45:21 +0000
@@ -238,8 +238,11 @@
             password = self.stdin.readline()
             if not password:
                 password = None
-            elif password[-1] == '\n':
-                password = password[:-1]
+            else:
+                password = password.decode(self.stdin.encoding)
+
+                if password[-1] == '\n':
+                    password = password[:-1]
         return password
 
     def get_password(self, prompt=u'', **kwargs):
@@ -273,8 +276,10 @@
         username = self.stdin.readline()
         if not username:
             username = None
-        elif username[-1] == '\n':
-            username = username[:-1]
+        else:
+            username = username.decode(self.stdin.encoding)
+            if username[-1] == '\n':
+                username = username[:-1]
         return username
 
     def make_progress_view(self):

=== modified file 'doc/en/release-notes/bzr-2.6.txt'
--- a/doc/en/release-notes/bzr-2.6.txt	2012-09-25 08:26:01 +0000
+++ b/doc/en/release-notes/bzr-2.6.txt	2012-10-10 18:45:21 +0000
@@ -57,6 +57,9 @@
   and would be ignored.
   (Haw Loeung, #932515)
 
+* ``Authentication.Config`` now always returns unicode user names and passwords.
+  (Vincent Ladeuil, #514301)
+
 * Warn when ``--show-base`` is used for ``pull`` in a treeless branch
   instead of failing. It's useless but harmless. (Vincent Ladeuil, #1022160)
 




More information about the bazaar-commits mailing list