82
82
a_contents = tree.get_file_text('a-id')
83
83
tree.rename_one('a', 'foo')
84
self.assertTreeLayout([('', root_id), ('b', 'b-id'), ('foo', 'a-id')],
84
self.assertTreeLayout([('', root_id), ('b/', 'b-id'), ('foo', 'a-id')],
86
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
86
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
88
88
self.assertPathDoesNotExist('a')
89
89
self.assertFileEqual(a_contents, 'foo')
98
98
a_contents = tree.get_file_text('a-id')
99
99
tree.rename_one('a', 'b/foo')
100
self.assertTreeLayout([('', root_id), ('b', 'b-id'), ('b/foo', 'a-id')],
100
self.assertTreeLayout([('', root_id), ('b/', 'b-id'), ('b/foo', 'a-id')],
102
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
102
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
103
103
tree.basis_tree())
104
104
self.assertPathDoesNotExist('tree/a')
105
105
self.assertFileEqual(a_contents, 'tree/b/foo')
110
110
tree.add(['a', 'b', 'b/c'], ['a-id', 'b-id', 'c-id'])
111
111
tree.commit('initial', rev_id='rev-1')
112
112
root_id = tree.get_root_id()
113
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
113
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
114
114
('b/c', 'c-id')], tree)
115
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
115
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
116
116
('b/c', 'c-id')], tree.basis_tree())
117
117
a_contents = tree.get_file_text('a-id')
118
118
tree.rename_one('a', 'b/d')
119
self.assertTreeLayout([('', root_id), ('b', 'b-id'), ('b/c', 'c-id'),
119
self.assertTreeLayout([('', root_id), ('b/', 'b-id'), ('b/c', 'c-id'),
120
120
('b/d', 'a-id')], tree)
121
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
121
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
122
122
('b/c', 'c-id')], tree.basis_tree())
123
123
self.assertPathDoesNotExist('a')
124
124
self.assertFileEqual(a_contents, 'b/d')
131
131
root_id = tree.get_root_id()
132
132
c_contents = tree.get_file_text('c-id')
133
133
tree.rename_one('b/c', 'd')
134
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
134
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
135
135
('d', 'c-id')], tree)
136
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
136
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
137
137
('b/c', 'c-id')], tree.basis_tree())
138
138
self.assertPathDoesNotExist('b/c')
139
139
self.assertFileEqual(c_contents, 'd')
147
147
# Target already exists
148
148
self.assertRaises(errors.RenameFailedFilesExist,
149
149
tree.rename_one, 'a', 'b/a')
150
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
150
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
151
151
('c', 'c-id')], tree)
152
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
152
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
153
153
('c', 'c-id')], tree.basis_tree())
155
155
def test_rename_one_onto_existing(self):
187
187
root_id = tree.get_root_id()
188
188
os.rename('a', 'b/foo')
190
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
190
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
192
192
# We don't need after=True as long as source is missing and target
194
194
tree.rename_one('a', 'b/foo')
195
self.assertTreeLayout([('', root_id), ('b', 'b-id'),
195
self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
196
196
('b/foo', 'a-id')], tree)
197
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
197
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
198
198
tree.basis_tree())
200
200
def test_rename_one_after_with_after(self):
205
205
root_id = tree.get_root_id()
206
206
os.rename('a', 'b/foo')
208
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
208
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
210
210
# Passing after=True should work as well
211
211
tree.rename_one('a', 'b/foo', after=True)
212
self.assertTreeLayout([('', root_id), ('b', 'b-id'),
212
self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
213
213
('b/foo', 'a-id')], tree)
214
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
214
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
215
215
tree.basis_tree())
217
217
def test_rename_one_after_dest_versioned(self):
269
269
os.rename('a', 'b/foo')
270
270
tree.remove(['a'])
272
self.assertTreeLayout([('', root_id), ('b', 'b-id')], tree)
272
self.assertTreeLayout([('', root_id), ('b/', 'b-id')], tree)
273
273
# We don't need after=True as long as source is missing and target
275
275
tree.rename_one('a', 'b/foo')
276
self.assertTreeLayout([('', root_id), ('b', 'b-id'),
276
self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
277
277
('b/foo', 'a-id')], tree)
278
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
278
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
279
279
tree.basis_tree())
281
281
def test_rename_one_after_no_target(self):
288
288
# Passing after when the file hasn't been rename_one raises an exception
289
289
self.assertRaises(errors.BzrMoveFailedError,
290
290
tree.rename_one, 'a', 'b/foo', after=True)
291
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
291
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
293
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
293
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
294
294
tree.basis_tree())
296
296
def test_rename_one_after_source_and_dest(self):
316
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
316
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
318
318
self.assertRaises(errors.RenameFailedFilesExist,
319
319
tree.rename_one, 'a', 'b/foo', after=False)
320
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
320
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
322
322
self.assertFileEqual(a_text, 'a')
323
323
self.assertFileEqual(foo_text, 'b/foo')
324
324
# But you can pass after=True
325
325
tree.rename_one('a', 'b/foo', after=True)
326
self.assertTreeLayout([('', root_id), ('b', 'b-id'),
326
self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
327
327
('b/foo', 'a-id')], tree)
328
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
328
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
329
329
tree.basis_tree())
330
330
# But it shouldn't actually move anything
331
331
self.assertFileEqual(a_text, 'a')
340
340
root_id = tree.get_root_id()
342
342
tree.rename_one('a', 'e/f')
343
self.assertTreeLayout([('', root_id), ('e', 'e-id'), ('e/f', 'a-id'),
344
('e/f/b', 'b-id'), ('e/f/c', 'c-id'),
343
self.assertTreeLayout([('', root_id), ('e/', 'e-id'), ('e/f/', 'a-id'),
344
('e/f/b', 'b-id'), ('e/f/c/', 'c-id'),
345
345
('e/f/c/d', 'd-id')], tree)
346
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('e', 'e-id'),
347
('a/b', 'b-id'), ('a/c', 'c-id'),
346
self.assertTreeLayout([('', root_id), ('a/', 'a-id'), ('e/', 'e-id'),
347
('a/b', 'b-id'), ('a/c/', 'c-id'),
348
348
('a/c/d', 'd-id')], tree.basis_tree())
350
350
def test_rename_one_moved(self):
356
356
root_id = tree.get_root_id()
358
358
tree.rename_one('a/b', 'c/foo')
359
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('c', 'c-id'),
359
self.assertTreeLayout([('', root_id), ('a/', 'a-id'), ('c/', 'c-id'),
360
360
('c/foo', 'b-id')], tree)
361
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('c', 'c-id'),
361
self.assertTreeLayout([('', root_id), ('a/', 'a-id'), ('c/', 'c-id'),
362
362
('a/b', 'b-id')], tree.basis_tree())
364
364
tree.rename_one('c/foo', 'bar')
365
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('bar', 'b-id'),
366
('c', 'c-id')], tree)
367
self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('c', 'c-id'),
365
self.assertTreeLayout([('', root_id), ('a/', 'a-id'), ('bar', 'b-id'),
366
('c/', 'c-id')], tree)
367
self.assertTreeLayout([('', root_id), ('a/', 'a-id'), ('c/', 'c-id'),
368
368
('a/b', 'b-id')], tree.basis_tree())
370
370
def test_rename_to_denormalised_fails(self):