53
56
self.assertEqual('symlink',
54
57
tree.kind(tree.path2id('link')))
59
def test_add_file_under_symlink(self):
61
# https://bugs.launchpad.net/bzr/+bug/192859/comments/3
62
tree = self.make_branch_and_tree('tree')
63
self.build_tree_contents([
64
('tree/link@', 'dir'),
66
('tree/dir/file', 'content'),
69
tree.smart_add(['tree/link/file']),
70
([u'dir', u'dir/file'], {}))
71
# should add the actual parent directory, not the apparent parent
72
# (which is actually a symlink)
73
self.assertTrue(tree.path2id('dir/file'))
74
self.assertTrue(tree.path2id('dir'))
75
self.assertIs(None, tree.path2id('link'))
76
self.assertIs(None, tree.path2id('link/file'))
79
class TestKindChanges(TestCaseWithWorkingTree):
81
_test_needs_features = [tests.SymlinkFeature]
83
def test_symlink_changes_to_dir(self):
84
# <https://bugs.launchpad.net/bzr/+bug/192859>:
85
# we had some past problems with the workingtree remembering for too
86
# long what kind of object was at a particular name; we really
87
# shouldn't do that. Operating on the dirstate through passing
88
# inventory deltas rather than mutating the inventory largely avoids
90
tree = self.make_branch_and_tree('tree')
91
self.build_tree_contents([
92
('tree/a@', 'target')])
93
tree.smart_add(['tree/a'])
94
tree.commit('add symlink')
96
self.build_tree_contents([
98
('tree/a/f', 'content'),
100
tree.smart_add(['tree/a/f'])
101
tree.commit('change to dir')
103
self.addCleanup(tree.unlock)
104
self.assertEquals([], list(tree.iter_changes(tree.basis_tree())))
106
['a', 'a/f'], sorted(info[0] for info in tree.list_files()))
108
def test_dir_changes_to_symlink(self):
109
# <https://bugs.launchpad.net/bzr/+bug/192859>:
110
# we had some past problems with the workingtree remembering for too
111
# long what kind of object was at a particular name; we really
112
# shouldn't do that. Operating on the dirstate through passing
113
# inventory deltas rather than mutating the inventory largely avoids
115
tree = self.make_branch_and_tree('tree')
116
self.build_tree_contents([
118
('tree/a/file', 'content'),
120
tree.smart_add(['tree/a'])
121
tree.commit('add dir')
122
osutils.rmtree('tree/a')
123
self.build_tree_contents([
124
('tree/a@', 'target'),
126
tree.commit('change to symlink')
129
class TestOpenTree(TestCaseWithWorkingTree):
131
_test_needs_features = [tests.SymlinkFeature]
56
133
def test_open_containing_through_symlink(self):
57
134
self.make_test_tree()
58
135
self.check_open_containing('link/content', 'tree', 'content')