31
31
class TestMove(TestCaseWithWorkingTree):
33
def get_tree_layout(self, tree):
34
"""Get the (path, file_id) pairs for the current tree."""
37
return [(path, ie.file_id) for path, ie
38
in tree.iter_entries_by_dir()]
42
def assertTreeLayout(self, expected, tree):
43
"""Check that the tree has the correct layout."""
44
actual = self.get_tree_layout(tree)
45
self.assertEqual(expected, actual)
33
47
def test_move_correct_call_named(self):
34
48
"""tree.move has the deprecated parameter 'to_name'.
35
49
It has been replaced by 'to_dir' for consistency.
98
113
tree = self.make_branch_and_tree('.')
99
114
self.build_tree(['a/'])
116
tree.commit('initial', rev_id='rev-1')
101
117
self.assertRaises(errors.BzrMoveFailedError,
102
118
tree.move, ['not-a-file'], 'a')
119
self.assertRaises(errors.BzrMoveFailedError,
120
tree.move, ['not-a-file'], '')
104
122
def test_move_target_not_versioned(self):
105
123
tree = self.make_branch_and_tree('.')
106
124
self.build_tree(['a/', 'b'])
126
tree.commit('initial', rev_id='rev-1')
108
127
self.assertRaises(errors.BzrMoveFailedError,
109
128
tree.move, ['b'], 'a')
116
135
tree = self.make_branch_and_tree('.')
117
136
self.build_tree(['a/', 'b'])
138
tree.commit('initial', rev_id='rev-1')
119
139
self.assertRaises(errors.BzrMoveFailedError,
120
140
tree.move, ['b'], 'a')
122
142
def test_move_multi_unversioned(self):
123
143
tree = self.make_branch_and_tree('.')
124
144
self.build_tree(['a/', 'b', 'c', 'd'])
125
tree.add(['a', 'c', 'd'])
145
tree.add(['a', 'c', 'd'], ['a-id', 'c-id', 'd-id'])
146
tree.commit('initial', rev_id='rev-1')
147
root_id = tree.get_root_id()
126
148
self.assertRaises(errors.BzrMoveFailedError,
127
149
tree.move, ['c', 'b', 'd'], 'a')
128
150
self.assertRaises(errors.BzrMoveFailedError,
129
151
tree.move, ['b', 'c', 'd'], 'a')
130
152
self.assertRaises(errors.BzrMoveFailedError,
131
tree.move, ['c', 'd', 'b'], 'a')
133
def get_tree_layout(self, tree):
134
"""Get the (path, file_id) pairs for the current tree."""
137
return [(path, ie.file_id) for path, ie
138
in tree.iter_entries_by_dir()]
142
def assertTreeLayout(self, expected, tree):
143
"""Check that the tree has the correct layout."""
144
actual = self.get_tree_layout(tree)
145
self.assertEqual(expected, actual)
153
tree.move, ['d', 'c', 'b'], 'a')
154
if osutils.lexists('a/c'):
155
# If 'c' was actually moved, then 'd' should have also been moved
156
self.assertTreeLayout([('', root_id), ('a', 'a-id'),
157
('a/c', 'c-id'), ('a/d', 'd-id')], tree)
159
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('c', 'c-id'),
160
('d', 'd-id')], tree)
161
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('c', 'c-id'),
162
('d', 'd-id')], tree.basis_tree())
147
164
def test_move_subdir(self):
148
165
tree = self.make_branch_and_tree('.')
149
166
self.build_tree(['a', 'b/', 'b/c'])
150
167
tree.add(['a', 'b', 'b/c'], ['a-id', 'b-id', 'c-id'])
168
tree.commit('initial', rev_id='rev-1')
151
169
root_id = tree.get_root_id()
152
170
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
153
171
('b/c', 'c-id')], tree)
172
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
173
('b/c', 'c-id')], tree.basis_tree())
154
174
a_contents = tree.get_file_text('a-id')
155
175
tree.move(['a'], 'b')
156
176
self.assertTreeLayout([('', root_id), ('b', 'b-id'), ('b/a', 'a-id'),
157
177
('b/c', 'c-id')], tree)
178
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
179
('b/c', 'c-id')], tree.basis_tree())
158
180
self.failIfExists('a')
159
181
self.assertFileEqual(a_contents, 'b/a')
162
184
tree = self.make_branch_and_tree('.')
163
185
self.build_tree(['a', 'b/', 'b/c'])
164
186
tree.add(['a', 'b', 'b/c'], ['a-id', 'b-id', 'c-id'])
187
tree.commit('initial', rev_id='rev-1')
165
188
root_id = tree.get_root_id()
166
189
c_contents = tree.get_file_text('c-id')
167
190
tree.move(['b/c'], '')
168
191
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
169
192
('c', 'c-id')], tree)
193
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
194
('b/c', 'c-id')], tree.basis_tree())
170
195
self.failIfExists('b/c')
171
196
self.assertFileEqual(c_contents, 'c')
187
213
self.failUnlessExists('b/c')
188
214
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
189
215
('b/c', 'c-id')], tree)
216
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
217
('c', 'c-id')], tree.basis_tree())
191
219
def test_move_onto_self(self):
192
220
tree = self.make_branch_and_tree('.')
193
221
self.build_tree(['b/', 'b/a'])
194
222
tree.add(['b', 'b/a'], ['b-id', 'a-id'])
223
tree.commit('initial', rev_id='rev-1')
196
225
self.assertRaises(errors.BzrMoveFailedError,
197
226
tree.move, ['b/a'], 'b')
277
311
# But it shouldn't actually move anything
278
312
self.assertFileEqual(a_text, 'a')
279
313
self.assertFileEqual(ba_text, 'b/a')
282
self.run_bzr('mv', 'a', 'b')
283
self.assertMoved('a','b')
285
self.run_bzr('mv', 'b', 'subdir')
286
self.assertMoved('b','subdir/b')
288
self.run_bzr('mv', 'subdir/b', 'a')
289
self.assertMoved('subdir/b','a')
291
self.run_bzr('mv', 'a', 'c', 'subdir')
292
self.assertMoved('a','subdir/a')
293
self.assertMoved('c','subdir/c')
295
self.run_bzr('mv', 'subdir/a', 'subdir/newa')
296
self.assertMoved('subdir/a','subdir/newa')