501
501
def test_id2path(self):
502
502
tree = self.make_workingtree('tree')
503
503
self.build_tree(['tree/a', 'tree/b'])
504
tree.add(['a'], ['a-id'])
505
self.assertEqual(u'a', tree.id2path('a-id'))
504
tree.add(['a'], [b'a-id'])
505
self.assertEqual(u'a', tree.id2path(b'a-id'))
506
506
self.assertRaises(errors.NoSuchId, tree.id2path, 'a')
508
tree.add(['b'], ['b-id'])
508
tree.add(['b'], [b'b-id'])
511
511
new_path = u'b\u03bcrry'
514
514
# support running the test on non-unicode platforms
516
516
tree.rename_one('a', new_path)
517
self.assertEqual(new_path, tree.id2path('a-id'))
517
self.assertEqual(new_path, tree.id2path(b'a-id'))
518
518
tree.commit(u'b\xb5rry')
519
519
tree.unversion([new_path])
520
self.assertRaises(errors.NoSuchId, tree.id2path, 'a-id')
521
self.assertEqual('b', tree.id2path('b-id'))
522
self.assertRaises(errors.NoSuchId, tree.id2path, 'c-id')
520
self.assertRaises(errors.NoSuchId, tree.id2path, b'a-id')
521
self.assertEqual('b', tree.id2path(b'b-id'))
522
self.assertRaises(errors.NoSuchId, tree.id2path, b'c-id')
524
524
def test_unique_root_id_per_tree(self):
525
525
# each time you initialize a new tree, it gets a different root id
684
684
"""Unversioned non-ascii paths should be reported as unicode"""
685
685
self.requireFeature(features.UnicodeFilenameFeature)
686
686
tree = self.make_branch_and_tree('.')
687
self.build_tree_contents([('f', '')])
688
tree.add(['f'], ['f-id'])
687
self.build_tree_contents([('f', b'')])
688
tree.add(['f'], [b'f-id'])
689
689
def tree_iter_changes(tree, files):
690
690
return list(tree.iter_changes(tree.basis_tree(),
691
691
specific_files=files, require_versioned=True))
823
823
state._read_dirblocks_if_needed()
824
824
self.assertEqual([
825
825
('', [(('', '', root_id), ['d', 'd'])]),
826
('', [(('', 'dir', 'dir-id'), ['d', 'd'])]),
827
('dir', [(('dir', 'file', 'file-id'), ['f', 'f'])]),
826
('', [(('', 'dir', b'dir-id'), ['d', 'd'])]),
827
('dir', [(('dir', 'file', b'file-id'), ['f', 'f'])]),
828
828
], self.get_simple_dirblocks(state))
830
830
tree.remove(['dir/file'])
831
831
self.assertEqual([
832
832
('', [(('', '', root_id), ['d', 'd'])]),
833
('', [(('', 'dir', 'dir-id'), ['d', 'd'])]),
834
('dir', [(('dir', 'file', 'file-id'), ['a', 'f'])]),
833
('', [(('', 'dir', b'dir-id'), ['d', 'd'])]),
834
('dir', [(('dir', 'file', b'file-id'), ['a', 'f'])]),
835
835
], self.get_simple_dirblocks(state))
836
836
# Make sure the removal is written to disk
839
839
# self.assertRaises(Exception, tree.update_basis_by_delta,
840
new_dir = inventory.InventoryDirectory('dir-id', 'new-dir', root_id)
841
new_dir.revision = 'new-revision-id'
842
new_file = inventory.InventoryFile('file-id', 'new-file', root_id)
843
new_file.revision = 'new-revision-id'
840
new_dir = inventory.InventoryDirectory(b'dir-id', 'new-dir', root_id)
841
new_dir.revision = b'new-revision-id'
842
new_file = inventory.InventoryFile(b'file-id', 'new-file', root_id)
843
new_file.revision = b'new-revision-id'
844
844
self.assertRaises(errors.InconsistentDelta,
845
tree.update_basis_by_delta, 'new-revision-id',
846
[('dir', 'new-dir', 'dir-id', new_dir),
847
('dir/file', 'new-dir/new-file', 'file-id', new_file),
845
tree.update_basis_by_delta, b'new-revision-id',
846
[('dir', 'new-dir', b'dir-id', new_dir),
847
('dir/file', 'new-dir/new-file', b'file-id', new_file),
856
856
state._read_dirblocks_if_needed()
857
857
self.assertEqual([
858
858
('', [(('', '', root_id), ['d', 'd'])]),
859
('', [(('', 'dir', 'dir-id'), ['d', 'd'])]),
860
('dir', [(('dir', 'file', 'file-id'), ['a', 'f'])]),
859
('', [(('', 'dir', b'dir-id'), ['d', 'd'])]),
860
('dir', [(('dir', 'file', b'file-id'), ['a', 'f'])]),
861
861
], self.get_simple_dirblocks(state))
867
867
"""Unversioning the root of a subtree unversions the entire subtree."""
868
868
tree = self.make_branch_and_tree('.')
869
869
self.build_tree(['a/', 'a/b', 'c/'])
870
tree.add(['a', 'a/b', 'c'], ['a-id', 'b-id', 'c-id'])
870
tree.add(['a', 'a/b', 'c'], [b'a-id', b'b-id', b'c-id'])
871
871
# within a lock unversion should take effect
872
872
tree.lock_write()
873
873
self.addCleanup(tree.unlock)