Rev 3479: Assert that we properly encode inv_entry.symlink_target, (bug #135320) in http://bzr.arbash-meinel.com/branches/bzr/1.6-dev/symlink_unicode_135320
John Arbash Meinel
john at arbash-meinel.com
Thu Jun 5 22:19:30 BST 2008
At http://bzr.arbash-meinel.com/branches/bzr/1.6-dev/symlink_unicode_135320
------------------------------------------------------------
revno: 3479
revision-id: john at arbash-meinel.com-20080605211911-2xtal2ehwcqkcymy
parent: john at arbash-meinel.com-20080605210642-zoc3nelx84xmsxuf
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: symlink_unicode_135320
timestamp: Thu 2008-06-05 16:19:11 -0500
message:
Assert that we properly encode inv_entry.symlink_target, (bug #135320)
-------------- next part --------------
=== modified file 'bzrlib/dirstate.py'
--- a/bzrlib/dirstate.py 2008-05-08 04:12:06 +0000
+++ b/bzrlib/dirstate.py 2008-06-05 21:19:11 +0000
@@ -1825,7 +1825,8 @@
raise
return result
- def _inv_entry_to_details(self, inv_entry):
+ @staticmethod
+ def _inv_entry_to_details(inv_entry):
"""Convert an inventory entry (from a revision tree) to state details.
:param inv_entry: An inventory entry whose sha1 and link targets can be
@@ -1841,7 +1842,13 @@
size = 0
executable = False
elif kind == 'symlink':
- fingerprint = inv_entry.symlink_target or ''
+ fingerprint = inv_entry.symlink_target
+ if fingerprint is None:
+ fingerprint = ''
+ else:
+ assert isinstance(fingerprint, unicode)
+ # Do we need a 'isinstance(fingerprint, unicode)' check here?
+ fingerprint = fingerprint.encode('UTF-8')
size = 0
executable = False
elif kind == 'file':
=== modified file 'bzrlib/tests/test_dirstate.py'
--- a/bzrlib/tests/test_dirstate.py 2008-04-24 07:22:53 +0000
+++ b/bzrlib/tests/test_dirstate.py 2008-06-05 21:19:11 +0000
@@ -23,6 +23,7 @@
from bzrlib import (
dirstate,
errors,
+ inventory,
osutils,
)
from bzrlib.memorytree import MemoryTree
@@ -2514,3 +2515,21 @@
state._discard_merge_parents()
state._validate()
self.assertEqual(exp_dirblocks, state._dirblocks)
+
+
+class Test_InvEntryToDetails(TestCaseWithDirState):
+
+ def assertDetails(self, expected, inv_entry):
+ details = dirstate.DirState._inv_entry_to_details(inv_entry)
+ self.assertEqual(expected, details)
+
+ def test_unicode_symlink(self):
+ uni_link_target = u'Non-\xe5scii'
+ utf8_link_target = 'Non-\xc3\xa5scii'
+ self.assertEqual(utf8_link_target, uni_link_target.encode('UTF-8'))
+ inv_entry = inventory.InventoryLink('link-file-id', 'name',
+ 'link-parent-id')
+ inv_entry.revision = 'link-revision-id'
+ inv_entry.symlink_target = uni_link_target
+ self.assertDetails(('l', utf8_link_target, 0, False,
+ 'link-revision-id'), inv_entry)
More information about the bazaar-commits
mailing list