Rev 2884: test and fix for commit with bad non-ascii messages (bialix, r=mbp) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Thu Oct 4 07:38:21 BST 2007


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 2884
revision-id: pqm at pqm.ubuntu.com-20071004063818-ymke1egbfap2m31x
parent: pqm at pqm.ubuntu.com-20071004060117-by9mnl9eubiyz572
parent: bialix at ukr.net-20071004055044-pb88kgkfayawro8n
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2007-10-04 07:38:18 +0100
message:
  test and fix for commit with bad non-ascii messages (bialix,r=mbp)
modified:
  bzrlib/msgeditor.py            msgeditor.py-20050901111708-ef6d8de98f5d8f2f
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/blackbox/test_commit.py test_commit.py-20060212094538-ae88fc861d969db0
  bzrlib/tests/blackbox/test_info.py test_info.py-20060215045507-bbdd2d34efab9e0a
  bzrlib/tests/blackbox/test_remove.py test_remove.py-20060530011439-fika5rm84lon0goe-1
  bzrlib/tests/test_info.py      test_info.py-20070320150933-m0xxm1g7xi9v6noe-1
  bzrlib/tests/test_msgeditor.py test_msgeditor.py-20051202041359-920315ec6011ee51
    ------------------------------------------------------------
    revno: 2839.6.3
    merged: bialix at ukr.net-20071004055044-pb88kgkfayawro8n
    parent: bialix at ukr.net-20071004053510-1zdsm5ywq7pq41et
    parent: pqm at pqm.ubuntu.com-20071003232450-c831pepea3skddct
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: 3
    timestamp: Thu 2007-10-04 08:50:44 +0300
    message:
      merge bzr.dev
    ------------------------------------------------------------
    revno: 2839.6.2
    merged: bialix at ukr.net-20071004053510-1zdsm5ywq7pq41et
    parent: bialix at ukr.net-20070921111545-f2791vn4uk7chglw
    parent: bialix at ukr.net-20070920204924-lzis6yy2a0cmrlsj
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: 3
    timestamp: Thu 2007-10-04 08:35:10 +0300
    message:
      changes after Martin's review
        ------------------------------------------------------------
        revno: 2804.4.6
        merged: bialix at ukr.net-20070920204924-lzis6yy2a0cmrlsj
        parent: bialix at ukr.net-20070907102447-eefqp9m87w738smx
        parent: pqm at pqm.ubuntu.com-20070920125023-upjqmzln7mjtvj1h
        committer: Alexander Belchenko <bialix at ukr.net>
        branch nick: selftest.win32
        timestamp: Thu 2007-09-20 23:49:24 +0300
        message:
          merge bzr.dev
        ------------------------------------------------------------
        revno: 2804.4.5
        merged: bialix at ukr.net-20070907102447-eefqp9m87w738smx
        parent: bialix at ukr.net-20070907094546-jxr38xe0t5hwbemy
        committer: Alexander Belchenko <bialix at ukr.net>
        branch nick: selftest.win32
        timestamp: Fri 2007-09-07 13:24:47 +0300
        message:
          multiparent.py: workaround for windows bug: .tell() for files opened in 'ab' mode before any write returns 0
        ------------------------------------------------------------
        revno: 2804.4.4
        merged: bialix at ukr.net-20070907094546-jxr38xe0t5hwbemy
        parent: bialix at ukr.net-20070907084620-7t25v0anhxompa0m
        committer: Alexander Belchenko <bialix at ukr.net>
        branch nick: selftest.win32
        timestamp: Fri 2007-09-07 12:45:46 +0300
        message:
          provide non-empty locations.conf for test_branch.TestBranchFormat5.test_set_push_location
        ------------------------------------------------------------
        revno: 2804.4.3
        merged: bialix at ukr.net-20070907084620-7t25v0anhxompa0m
        parent: bialix at ukr.net-20070906133055-zlir290vgaxv9h4m
        committer: Alexander Belchenko <bialix at ukr.net>
        branch nick: selftest.win32
        timestamp: Fri 2007-09-07 11:46:20 +0300
        message:
          fix for test_info-tests: using osutils.getcwd instead of os.getcwd (sigh)
        ------------------------------------------------------------
        revno: 2804.4.2
        merged: bialix at ukr.net-20070906133055-zlir290vgaxv9h4m
        parent: bialix at ukr.net-20070906115959-512lrh7jb9rll98d
        committer: Alexander Belchenko <bialix at ukr.net>
        branch nick: selftest.win32
        timestamp: Thu 2007-09-06 16:30:55 +0300
        message:
          win32-specific fix for removing file/link/dir
        ------------------------------------------------------------
        revno: 2804.4.1
        merged: bialix at ukr.net-20070906115959-512lrh7jb9rll98d
        parent: pqm at pqm.ubuntu.com-20070906063814-iiwx3hccoukt499k
        committer: Alexander Belchenko <bialix at ukr.net>
        branch nick: selftest.win32
        timestamp: Thu 2007-09-06 14:59:59 +0300
        message:
          some win32-specific fixes for selftest
    ------------------------------------------------------------
    revno: 2839.6.1
    merged: bialix at ukr.net-20070921111545-f2791vn4uk7chglw
    parent: pqm at pqm.ubuntu.com-20070920125023-upjqmzln7mjtvj1h
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: 3
    timestamp: Fri 2007-09-21 14:15:45 +0300
    message:
      test and fix for commit with bad non-ascii messages (non-ascii chars that cannot be decoded with current user encoding)
=== modified file 'bzrlib/msgeditor.py'
--- a/bzrlib/msgeditor.py	2007-08-31 05:32:00 +0000
+++ b/bzrlib/msgeditor.py	2007-10-04 05:35:10 +0000
@@ -102,8 +102,8 @@
 
     if not start_message is None:
         start_message = start_message.encode(bzrlib.user_encoding)
-    return edit_commit_message_encoded(infotext.encode(bzrlib.user_encoding),
-                                       ignoreline, start_message)
+    infotext = infotext.encode(bzrlib.user_encoding, 'replace')
+    return edit_commit_message_encoded(infotext, ignoreline, start_message)
 
 
 def edit_commit_message_encoded(infotext, ignoreline=DEFAULT_IGNORE_LINE,

=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2007-10-02 06:13:56 +0000
+++ b/bzrlib/tests/__init__.py	2007-10-04 05:50:44 +0000
@@ -1153,6 +1153,7 @@
             'BZR_HOME': None, # Don't inherit BZR_HOME to all the tests.
             'HOME': os.getcwd(),
             'APPDATA': None,  # bzr now use Win32 API and don't rely on APPDATA
+            'BZR_EDITOR': None, # test_msgeditor manipulates this variable
             'BZR_EMAIL': None,
             'BZREMAIL': None, # may still be present in the environment
             'EMAIL': None,
@@ -1301,7 +1302,9 @@
             working_dir):
         """Run bazaar command line, splitting up a string command line."""
         if isinstance(args, basestring):
-            args = list(shlex.split(args))
+            # shlex don't understand unicode strings,
+            # so args should be plain string (bialix 20070906)
+            args = list(shlex.split(str(args)))
         return self._run_bzr_core(args, retcode=retcode,
                 encoding=encoding, stdin=stdin, working_dir=working_dir,
                 )
@@ -2628,3 +2631,18 @@
         else:
             return uni_val, str_val
     return None, None
+
+
+def probe_bad_non_ascii(encoding):
+    """Try to find [bad] character with code [128..255]
+    that cannot be decoded to unicode in some encoding.
+    Return None if all non-ascii characters is valid
+    for given encoding.
+    """
+    for i in xrange(128, 256):
+        char = chr(i)
+        try:
+            char.decode(encoding)
+        except UnicodeDecodeError:
+            return char
+    return None

=== modified file 'bzrlib/tests/blackbox/test_commit.py'
--- a/bzrlib/tests/blackbox/test_commit.py	2007-10-03 05:25:50 +0000
+++ b/bzrlib/tests/blackbox/test_commit.py	2007-10-04 05:50:44 +0000
@@ -18,12 +18,19 @@
 """Tests for the commit CLI of bzr."""
 
 import os
+import sys
 
+import bzrlib
 from bzrlib import (
     osutils,
     ignores,
+    osutils,
     )
 from bzrlib.bzrdir import BzrDir
+from bzrlib.tests import (
+    probe_bad_non_ascii,
+    TestSkipped,
+    )
 from bzrlib.tests.blackbox import ExternalBase
 
 
@@ -238,8 +245,16 @@
         tree = self.make_branch_and_tree('.')
         self.build_tree_contents([('foo.c', 'int main() {}')])
         tree.add('foo.c')
-        out,err = self.run_bzr_subprocess('commit -m "\xff"', retcode=1,
-                                                    env_changes={'LANG': 'C'})
+        # LANG env variable has no effect on Windows
+        # but some characters anyway cannot be represented
+        # in default user encoding
+        char = probe_bad_non_ascii(bzrlib.user_encoding)
+        if char is None:
+            raise TestSkipped('Cannot find suitable non-ascii character'
+                'for user_encoding (%s)' % bzrlib.user_encoding)
+        out,err = self.run_bzr_subprocess('commit -m "%s"' % char,
+                                          retcode=1,
+                                          env_changes={'LANG': 'C'})
         self.assertContainsRe(err, r'bzrlib.errors.BzrError: Parameter.*is '
                                     'unsupported by the current encoding.')
 

=== modified file 'bzrlib/tests/blackbox/test_info.py'
--- a/bzrlib/tests/blackbox/test_info.py	2007-09-21 12:30:48 +0000
+++ b/bzrlib/tests/blackbox/test_info.py	2007-10-04 05:50:44 +0000
@@ -23,6 +23,7 @@
 import bzrlib
 from bzrlib import (
     bzrdir,
+    errors,
     osutils,
     repository,
     urlutils,
@@ -1139,8 +1140,7 @@
             # We expect this to fail because of locking errors. (A write-locked
             # file cannot be read-locked in the same process).
             # This should be removed when the locking errors are fixed.
-            args = command_string.split(' ')
-            self.run_bzr_error([], 'info', *args)
+            self.run_bzr_error([], 'info ' + command_string)
             return
         out, err = self.run_bzr('info %s' % command_string)
         description = {

=== modified file 'bzrlib/tests/blackbox/test_remove.py'
--- a/bzrlib/tests/blackbox/test_remove.py	2007-08-04 20:36:29 +0000
+++ b/bzrlib/tests/blackbox/test_remove.py	2007-09-06 11:59:59 +0000
@@ -16,7 +16,9 @@
 
 
 import os
+import sys
 
+from bzrlib.tests import TestSkipped
 from bzrlib.tests.blackbox import ExternalBase
 from bzrlib.workingtree import WorkingTree
 from bzrlib import osutils
@@ -122,6 +124,8 @@
         self.run_bzr_remove_changed_files(['modified:[.\s]*a[.\s]*b/c'], files)
 
     def test_remove_changed_files_from_child_dir(self):
+        if sys.platform == 'win32':
+            raise TestSkipped("Windows unable to remove '.' directory")
         tree = self._make_add_and_assert_tree(files)
         self.run_bzr("commit -m 'added files'")
         self.changeFile(a)

=== modified file 'bzrlib/tests/test_info.py'
--- a/bzrlib/tests/test_info.py	2007-09-14 02:19:41 +0000
+++ b/bzrlib/tests/test_info.py	2007-10-04 05:50:44 +0000
@@ -14,6 +14,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
+import sys
 from urllib import quote
 
 from bzrlib import (
@@ -248,6 +249,8 @@
         )
 
     def test_location_list(self):
+        if sys.platform == 'win32':
+            raise tests.TestSkipped('Windows-unfriendly test')
         locs = info.LocationList('/home/foo')
         locs.add_url('a', 'file:///home/foo/')
         locs.add_url('b', 'file:///home/foo/bar/')

=== modified file 'bzrlib/tests/test_msgeditor.py'
--- a/bzrlib/tests/test_msgeditor.py	2007-08-31 05:32:00 +0000
+++ b/bzrlib/tests/test_msgeditor.py	2007-10-04 05:35:10 +0000
@@ -20,6 +20,7 @@
 import os
 import sys
 
+import bzrlib
 from bzrlib import (
     errors,
     msgeditor,
@@ -31,9 +32,14 @@
     make_commit_message_template_encoded,
     edit_commit_message_encoded
 )
-from bzrlib.tests import TestCaseWithTransport, TestSkipped
+from bzrlib.tests import (
+    probe_bad_non_ascii,
+    TestCaseWithTransport,
+    TestSkipped,
+    )
 from bzrlib.trace import mutter
 
+
 class MsgEditorTest(TestCaseWithTransport):
 
     def make_uncommitted_tree(self):
@@ -90,18 +96,6 @@
   hell\u00d8
 """.encode('utf8') in template)
 
-    def setUp(self):
-        super(MsgEditorTest, self).setUp()
-        self._bzr_editor = os.environ.get('BZR_EDITOR', None)
-
-    def tearDown(self):
-        if self._bzr_editor is not None:
-            os.environ['BZR_EDITOR'] = self._bzr_editor
-        else:
-            if os.environ.get('BZR_EDITOR', None) is not None:
-                del os.environ['BZR_EDITOR']
-        super(MsgEditorTest, self).tearDown()
-
     def test_run_editor(self):
         if sys.platform == "win32":
             f = file('fed.bat', 'w')
@@ -162,6 +156,10 @@
         self.assertEqual('test message from fed\n',
                          msgeditor.edit_commit_message(''))
 
+        mutter('edit_commit_message with ascii string infotext')
+        self.assertEqual('test message from fed\n',
+                         msgeditor.edit_commit_message('spam'))
+
         mutter('edit_commit_message with unicode infotext')
         self.assertEqual('test message from fed\n',
                          msgeditor.edit_commit_message(u'\u1234'))
@@ -256,7 +254,15 @@
     def test_unsupported_encoding_commit_message(self):
         old_env = osutils.set_or_unset_env('LANG', 'C')
         try:
-            self.make_fake_editor(message='\xff')
+            # LANG env variable has no effect on Windows
+            # but some characters anyway cannot be represented
+            # in default user encoding
+            char = probe_bad_non_ascii(bzrlib.user_encoding)
+            if char is None:
+                raise TestSkipped('Cannot find suitable non-ascii character '
+                    'for user_encoding (%s)' % bzrlib.user_encoding)
+
+            self.make_fake_editor(message=char)
 
             working_tree = self.make_uncommitted_tree()
             self.assertRaises(errors.BadCommitMessageEncoding,




More information about the bazaar-commits mailing list