Rev 4262: Fix _PreviewTree.get_symlink_target for unicode symlinks. in file:///home/vila/src/bzr/bugs/355454-unicode-warning/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Fri Apr 17 09:04:37 BST 2009
At file:///home/vila/src/bzr/bugs/355454-unicode-warning/
------------------------------------------------------------
revno: 4262
revision-id: v.ladeuil+lp at free.fr-20090417080436-j1q0a5adj7t20b12
parent: v.ladeuil+lp at free.fr-20090416213135-1ycxrk415pbsse9l
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: 355454-unicode-warning
timestamp: Fri 2009-04-17 10:04:36 +0200
message:
Fix _PreviewTree.get_symlink_target for unicode symlinks.
* bzrlib/tests/test_shelf.py:
(TestPrepareShelf._test_shelve_symlink_creation): Factored out and
add _PreviewTree.get_symlink_target check that reveals the unicode
bug.
(TestPrepareShelf.test_shelve_symlink_creation,
TestPrepareShelf.test_shelve_unicode_symlink_creation): Also test
unicode symlinks.
* bzrlib/transform.py:
(_PreviewTree.get_symlink_target): Use osutils.readlink()
-------------- next part --------------
=== modified file 'bzrlib/tests/test_shelf.py'
--- a/bzrlib/tests/test_shelf.py 2009-04-16 14:13:57 +0000
+++ b/bzrlib/tests/test_shelf.py 2009-04-17 08:04:36 +0000
@@ -129,24 +129,34 @@
self.assertEqual('directory',
creator.shelf_transform.final_kind(s_bar_trans_id))
+ def _test_shelve_symlink_creation(self, link_name, link_target):
+ self.requireFeature(tests.SymlinkFeature)
+ tree = self.make_branch_and_tree('.')
+ tree.lock_write()
+ self.addCleanup(tree.unlock)
+ tree.commit('Empty tree')
+ os.symlink(link_target, link_name)
+ tree.add(link_name, 'foo-id')
+ creator = shelf.ShelfCreator(tree, tree.basis_tree())
+ self.addCleanup(creator.finalize)
+ self.assertEqual([('add file', 'foo-id', 'symlink', link_name)],
+ list(creator.iter_shelvable()))
+ creator.shelve_creation('foo-id')
+ creator.transform()
+ s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
+ self.failIfExists(link_name)
+ limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
+ self.assertEqual(link_target, osutils.readlink(limbo_name))
+ ptree = creator.shelf_transform.get_preview_tree()
+ self.assertEqual(link_target, ptree.get_symlink_target('foo-id'))
+
def test_shelve_symlink_creation(self):
- self.requireFeature(tests.SymlinkFeature)
- tree = self.make_branch_and_tree('.')
- tree.lock_write()
- self.addCleanup(tree.unlock)
- tree.commit('Empty tree')
- os.symlink('bar', 'foo')
- tree.add('foo', 'foo-id')
- creator = shelf.ShelfCreator(tree, tree.basis_tree())
- self.addCleanup(creator.finalize)
- self.assertEqual([('add file', 'foo-id', 'symlink', 'foo')],
- list(creator.iter_shelvable()))
- creator.shelve_creation('foo-id')
- creator.transform()
- s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
- self.failIfExists('foo')
- limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
- self.assertEqual('bar', os.readlink(limbo_name))
+ self._test_shelve_symlink_creation('foo', 'bar')
+
+ def test_shelve_unicode_symlink_creation(self):
+ self.requireFeature(tests.UnicodeFilenameFeature)
+ self._test_shelve_symlink_creation(u'fo\N{Euro Sign}o',
+ u'b\N{Euro Sign}ar')
def _test_shelve_symlink_target_change(self, link_name,
old_target, new_target):
@@ -180,6 +190,8 @@
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
self.assertEqual(new_target, read_link(limbo_name))
+ ptree = creator.shelf_transform.get_preview_tree()
+ self.assertEqual(new_target, ptree.get_symlink_target('foo-id'))
def test_shelve_symlink_target_change(self):
self._test_shelve_symlink_target_change('foo', 'bar', 'baz')
=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py 2009-04-16 14:13:57 +0000
+++ b/bzrlib/transform.py 2009-04-17 08:04:36 +0000
@@ -1910,8 +1910,7 @@
return self._transform._tree.get_symlink_target(file_id)
trans_id = self._transform.trans_id_file_id(file_id)
name = self._transform._limbo_name(trans_id)
- # XXX: Looks like we can return arbitrary encoded path below
- return os.readlink(name)
+ return osutils.readlink(name)
def walkdirs(self, prefix=''):
pending = [self._transform.root]
More information about the bazaar-commits
mailing list