Rev 2299: Fix Inventory.iter_entries_by_dir to return Unicode paths, in http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/utf8_file_ids
John Arbash Meinel
john at arbash-meinel.com
Sat Feb 17 21:48:44 GMT 2007
At http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/utf8_file_ids
------------------------------------------------------------
revno: 2299
revision-id: john at arbash-meinel.com-20070217214837-fcv01ahawwq8u687
parent: john at arbash-meinel.com-20070217211722-yxx3xjxtxeijc8d7
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: utf8_file_ids
timestamp: Sat 2007-02-17 15:48:37 -0600
message:
Fix Inventory.iter_entries_by_dir to return Unicode paths,
update xml5 serializer tests to ensure that we get unicode paths and file ids
and utf8 revision ids.
modified:
bzrlib/inventory.py inventory.py-20050309040759-6648b84ca2005b37
bzrlib/tests/test_xml.py test_xml.py-20050905091053-80b45588931a9b35
-------------- next part --------------
=== modified file 'bzrlib/inventory.py'
--- a/bzrlib/inventory.py 2007-02-06 14:52:16 +0000
+++ b/bzrlib/inventory.py 2007-02-17 21:48:37 +0000
@@ -875,7 +875,7 @@
an id of None.
"""
if root_id is not None:
- self._set_root(InventoryDirectory(root_id, '', None))
+ self._set_root(InventoryDirectory(root_id, u'', None))
else:
self.root = None
self._byid = {}
@@ -970,7 +970,7 @@
from_dir = self.root
if (specific_file_ids is None or
self.root.file_id in specific_file_ids):
- yield '', self.root
+ yield u'', self.root
elif isinstance(from_dir, basestring):
from_dir = self._byid[from_dir]
=== modified file 'bzrlib/tests/test_xml.py'
--- a/bzrlib/tests/test_xml.py 2007-02-09 23:15:53 +0000
+++ b/bzrlib/tests/test_xml.py 2007-02-17 21:48:37 +0000
@@ -130,6 +130,35 @@
"""
+_revision_utf8_v5 = """<revision committer="Erik Bågfors <erik at foo.net>"
+ inventory_sha1="e79c31c1deb64c163cf660fdedd476dd579ffd41"
+ revision_id="erik at bågfors-02"
+ timestamp="1125907235.212"
+ timezone="36000">
+<message>Include µnicode characters
+</message>
+<parents>
+<revision_ref revision_id="erik at bågfors-01"/>
+</parents>
+</revision>
+"""
+
+_inventory_utf8_v5 = """<inventory file_id="TREé_ROOT" format="5"
+ revision_id="erik at bågfors-02">
+<file file_id="bår-01"
+ name="bår" parent_id="TREE_ROOT"
+ revision="erik at bågfors-01"/>
+<directory name="sµbdir"
+ file_id="sµbdir-01"
+ parent_id="TREE_ROOT"
+ revision="erik at bågfors-01"/>
+<file executable="yes" file_id="bår-02"
+ name="bår" parent_id="sµbdir-01"
+ revision="erik at bågfors-02"/>
+</inventory>
+"""
+
+
class TestSerializer(TestCase):
"""Test XML serialization"""
def test_canned_inventory(self):
@@ -263,17 +292,39 @@
def test_revision_ids_are_utf8(self):
"""Parsed revision_ids should all be utf-8 strings, not unicode."""
s_v5 = bzrlib.xml5.serializer_v5
- rev = s_v5.read_revision_from_string(_revision_v5)
+ rev = s_v5.read_revision_from_string(_revision_utf8_v5)
+ self.assertEqual('erik at b\xc3\xa5gfors-02', rev.revision_id)
self.assertIsInstance(rev.revision_id, str)
+ self.assertEqual(['erik at b\xc3\xa5gfors-01'], rev.parent_ids)
for parent_id in rev.parent_ids:
self.assertIsInstance(parent_id, str)
+ self.assertEqual(u'Include \xb5nicode characters\n', rev.message)
+ self.assertIsInstance(rev.message, unicode)
# ie.revision should either be None or a utf-8 revision id
- inv = s_v5.read_inventory_from_string(_committed_inv_v5)
- for path, ie in inv.iter_entries():
- if ie.revision is None:
- continue
- self.assertIsInstance(ie.revision, str)
+ inv = s_v5.read_inventory_from_string(_inventory_utf8_v5)
+ rev_id_1 = u'erik at b\xe5gfors-01'.encode('utf8')
+ rev_id_2 = u'erik at b\xe5gfors-02'.encode('utf8')
+ expected = [(u'', u'TRE\xe9_ROOT', None),
+ (u'b\xe5r', u'b\xe5r-01', rev_id_1),
+ (u's\xb5bdir', u's\xb5bdir-01', rev_id_1),
+ (u's\xb5bdir/b\xe5r', u'b\xe5r-02', rev_id_2),
+ ]
+ self.assertEqual(rev_id_2, inv.revision_id)
+ self.assertIsInstance(inv.revision_id, str)
+
+ actual = list(inv.iter_entries_by_dir())
+ for (exp_path, exp_file_id, exp_rev_id), (act_path, act_ie) in \
+ zip(expected, actual):
+ self.assertEqual(exp_path, act_path)
+ self.assertIsInstance(act_path, unicode)
+ self.assertEqual(exp_file_id, act_ie.file_id)
+ self.assertIsInstance(act_ie.file_id, unicode)
+ self.assertEqual(exp_rev_id, act_ie.revision)
+ if exp_rev_id is not None:
+ self.assertIsInstance(act_ie.revision, str)
+
+ self.assertEqual(len(expected), len(actual))
class TestEncodeAndEscape(TestCase):
More information about the bazaar-commits
mailing list