~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_workingtree/test_rename_one.py

  • Committer: Patch Queue Manager
  • Date: 2016-02-01 19:13:13 UTC
  • mfrom: (6614.2.2 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20160201191313-wdfvmfff1djde6oq
(vila) Release 2.7.0 (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
from bzrlib.tests import (
27
27
    features,
28
28
    )
 
29
from bzrlib.tests.matchers import HasLayout
29
30
 
30
31
from bzrlib.tests.per_workingtree import TestCaseWithWorkingTree
31
32
 
32
33
 
33
34
class TestRenameOne(TestCaseWithWorkingTree):
34
35
 
35
 
    def get_tree_layout(self, tree):
36
 
        """Get the (path, file_id) pairs for the current tree."""
37
 
        tree.lock_read()
38
 
        try:
39
 
            return [(path, ie.file_id) for path, ie
40
 
                    in tree.iter_entries_by_dir()]
41
 
        finally:
42
 
            tree.unlock()
43
 
 
44
36
    def assertTreeLayout(self, expected, tree):
45
37
        """Check that the tree has the correct layout."""
46
 
        actual = self.get_tree_layout(tree)
47
 
        self.assertEqual(expected, actual)
 
38
        self.assertThat(tree, HasLayout(expected))
48
39
 
49
40
    def test_rename_one_target_not_dir(self):
50
41
        tree = self.make_branch_and_tree('.')
90
81
 
91
82
        a_contents = tree.get_file_text('a-id')
92
83
        tree.rename_one('a', 'foo')
93
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id'), ('foo', 'a-id')],
 
84
        self.assertTreeLayout([('', root_id), ('b/', 'b-id'), ('foo', 'a-id')],
94
85
                              tree)
95
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
86
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
96
87
                              tree.basis_tree())
97
88
        self.assertPathDoesNotExist('a')
98
89
        self.assertFileEqual(a_contents, 'foo')
106
97
 
107
98
        a_contents = tree.get_file_text('a-id')
108
99
        tree.rename_one('a', 'b/foo')
109
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id'), ('b/foo', 'a-id')],
 
100
        self.assertTreeLayout([('', root_id), ('b/', 'b-id'), ('b/foo', 'a-id')],
110
101
                              tree)
111
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
102
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
112
103
                              tree.basis_tree())
113
104
        self.assertPathDoesNotExist('tree/a')
114
105
        self.assertFileEqual(a_contents, 'tree/b/foo')
119
110
        tree.add(['a', 'b', 'b/c'], ['a-id', 'b-id', 'c-id'])
120
111
        tree.commit('initial', rev_id='rev-1')
121
112
        root_id = tree.get_root_id()
122
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
 
113
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
123
114
                               ('b/c', 'c-id')], tree)
124
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
 
115
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
125
116
                               ('b/c', 'c-id')], tree.basis_tree())
126
117
        a_contents = tree.get_file_text('a-id')
127
118
        tree.rename_one('a', 'b/d')
128
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id'), ('b/c', 'c-id'),
 
119
        self.assertTreeLayout([('', root_id), ('b/', 'b-id'), ('b/c', 'c-id'),
129
120
                               ('b/d', 'a-id')], tree)
130
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
 
121
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
131
122
                               ('b/c', 'c-id')], tree.basis_tree())
132
123
        self.assertPathDoesNotExist('a')
133
124
        self.assertFileEqual(a_contents, 'b/d')
140
131
        root_id = tree.get_root_id()
141
132
        c_contents = tree.get_file_text('c-id')
142
133
        tree.rename_one('b/c', 'd')
143
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
 
134
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
144
135
                               ('d', 'c-id')], tree)
145
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
 
136
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
146
137
                               ('b/c', 'c-id')], tree.basis_tree())
147
138
        self.assertPathDoesNotExist('b/c')
148
139
        self.assertFileEqual(c_contents, 'd')
156
147
        # Target already exists
157
148
        self.assertRaises(errors.RenameFailedFilesExist,
158
149
                          tree.rename_one, 'a', 'b/a')
159
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
 
150
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
160
151
                               ('c', 'c-id')], tree)
161
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id'),
 
152
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id'),
162
153
                               ('c', 'c-id')], tree.basis_tree())
163
154
 
164
155
    def test_rename_one_onto_existing(self):
196
187
        root_id = tree.get_root_id()
197
188
        os.rename('a', 'b/foo')
198
189
 
199
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
190
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
200
191
                              tree)
201
192
        # We don't need after=True as long as source is missing and target
202
193
        # exists.
203
194
        tree.rename_one('a', 'b/foo')
204
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id'),
 
195
        self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
205
196
                               ('b/foo', 'a-id')], tree)
206
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
197
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
207
198
                              tree.basis_tree())
208
199
 
209
200
    def test_rename_one_after_with_after(self):
214
205
        root_id = tree.get_root_id()
215
206
        os.rename('a', 'b/foo')
216
207
 
217
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
208
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
218
209
                              tree)
219
210
        # Passing after=True should work as well
220
211
        tree.rename_one('a', 'b/foo', after=True)
221
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id'),
 
212
        self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
222
213
                               ('b/foo', 'a-id')], tree)
223
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
214
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
224
215
                              tree.basis_tree())
225
216
 
226
217
    def test_rename_one_after_dest_versioned(self):
278
269
        os.rename('a', 'b/foo')
279
270
        tree.remove(['a'])
280
271
 
281
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id')], tree)
 
272
        self.assertTreeLayout([('', root_id), ('b/', 'b-id')], tree)
282
273
        # We don't need after=True as long as source is missing and target
283
274
        # exists.
284
275
        tree.rename_one('a', 'b/foo')
285
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id'),
 
276
        self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
286
277
                               ('b/foo', 'a-id')], tree)
287
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
278
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
288
279
                              tree.basis_tree())
289
280
 
290
281
    def test_rename_one_after_no_target(self):
297
288
        # Passing after when the file hasn't been rename_one raises an exception
298
289
        self.assertRaises(errors.BzrMoveFailedError,
299
290
                          tree.rename_one, 'a', 'b/foo', after=True)
300
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
291
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
301
292
                              tree)
302
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
293
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
303
294
                              tree.basis_tree())
304
295
 
305
296
    def test_rename_one_after_source_and_dest(self):
322
313
        finally:
323
314
            foo_file.close()
324
315
 
325
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
316
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
326
317
                              tree)
327
318
        self.assertRaises(errors.RenameFailedFilesExist,
328
319
                          tree.rename_one, 'a', 'b/foo', after=False)
329
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
320
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
330
321
                              tree)
331
322
        self.assertFileEqual(a_text, 'a')
332
323
        self.assertFileEqual(foo_text, 'b/foo')
333
324
        # But you can pass after=True
334
325
        tree.rename_one('a', 'b/foo', after=True)
335
 
        self.assertTreeLayout([('', root_id), ('b', 'b-id'),
 
326
        self.assertTreeLayout([('', root_id), ('b/', 'b-id'),
336
327
                               ('b/foo', 'a-id')], tree)
337
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b', 'b-id')],
 
328
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('b/', 'b-id')],
338
329
                              tree.basis_tree())
339
330
        # But it shouldn't actually move anything
340
331
        self.assertFileEqual(a_text, 'a')
349
340
        root_id = tree.get_root_id()
350
341
 
351
342
        tree.rename_one('a', 'e/f')
352
 
        self.assertTreeLayout([('', root_id), ('e', 'e-id'), ('e/f', 'a-id'),
353
 
                               ('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'),
354
345
                               ('e/f/c/d', 'd-id')], tree)
355
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('e', 'e-id'),
356
 
                               ('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'),
357
348
                               ('a/c/d', 'd-id')], tree.basis_tree())
358
349
 
359
350
    def test_rename_one_moved(self):
365
356
        root_id = tree.get_root_id()
366
357
 
367
358
        tree.rename_one('a/b', 'c/foo')
368
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('c', 'c-id'),
 
359
        self.assertTreeLayout([('', root_id), ('a/', 'a-id'), ('c/', 'c-id'),
369
360
                               ('c/foo', 'b-id')], tree)
370
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('c', 'c-id'),
 
361
        self.assertTreeLayout([('', root_id), ('a/', 'a-id'), ('c/', 'c-id'),
371
362
                               ('a/b', 'b-id')], tree.basis_tree())
372
363
 
373
364
        tree.rename_one('c/foo', 'bar')
374
 
        self.assertTreeLayout([('', root_id), ('a', 'a-id'), ('bar', 'b-id'),
375
 
                               ('c', 'c-id')], tree)
376
 
        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'),
377
368
                               ('a/b', 'b-id')], tree.basis_tree())
378
369
 
379
370
    def test_rename_to_denormalised_fails(self):