/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_transform.py

  • Committer: Michael Hudson
  • Date: 2007-11-29 18:58:23 UTC
  • mfrom: (3048 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3189.
  • Revision ID: michael.hudson@canonical.com-20071129185823-vpokl0unnsjib0xw
merge bzr.dev
a bit involved, hope i got it all right!

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
from bzrlib.transform import (TreeTransform, ROOT_PARENT, FinalPaths, 
47
47
                              resolve_conflicts, cook_conflicts, 
48
48
                              find_interesting, build_tree, get_backup_name,
49
 
                              change_entry, _FileMover, TransformPreview)
50
 
 
 
49
                              change_entry, _FileMover, resolve_checkout,
 
50
                              TransformPreview)
51
51
 
52
52
class TestTreeTransform(tests.TestCaseWithTransport):
53
53
 
86
86
        self.assertRaises(ExistingPendingDeletion, self.get_transform)
87
87
 
88
88
    def test_build(self):
89
 
        transform, root = self.get_transform() 
 
89
        transform, root = self.get_transform()
 
90
        self.wt.lock_tree_write()
 
91
        self.addCleanup(self.wt.unlock)
90
92
        self.assertIs(transform.get_tree_parent(root), ROOT_PARENT)
91
93
        imaginary_id = transform.trans_id_tree_path('imaginary')
92
94
        imaginary_id2 = transform.trans_id_tree_path('imaginary/')
129
131
 
130
132
    def test_convenience(self):
131
133
        transform, root = self.get_transform()
 
134
        self.wt.lock_tree_write()
 
135
        self.addCleanup(self.wt.unlock)
132
136
        trans_id = transform.new_file('name', root, 'contents', 
133
137
                                      'my_pretties', True)
134
138
        oz = transform.new_directory('oz', root, 'oz-id')
235
239
        transform3.adjust_path('tip', root_id, tip_id)
236
240
        transform3.apply()
237
241
 
 
242
    def test_conflict_on_case_insensitive(self):
 
243
        tree = self.make_branch_and_tree('tree')
 
244
        # Don't try this at home, kids!
 
245
        # Force the tree to report that it is case sensitive, for conflict
 
246
        # resolution tests
 
247
        tree.case_sensitive = True
 
248
        transform = TreeTransform(tree)
 
249
        self.addCleanup(transform.finalize)
 
250
        transform.new_file('file', transform.root, 'content')
 
251
        transform.new_file('FiLe', transform.root, 'content')
 
252
        result = transform.find_conflicts()
 
253
        self.assertEqual([], result)
 
254
        # Force the tree to report that it is case insensitive, for conflict
 
255
        # generation tests
 
256
        tree.case_sensitive = False
 
257
        result = transform.find_conflicts()
 
258
        self.assertEqual([('duplicate', 'new-1', 'new-2', 'file')], result)
 
259
 
 
260
    def test_conflict_on_case_insensitive_existing(self):
 
261
        tree = self.make_branch_and_tree('tree')
 
262
        self.build_tree(['tree/FiLe'])
 
263
        # Don't try this at home, kids!
 
264
        # Force the tree to report that it is case sensitive, for conflict
 
265
        # resolution tests
 
266
        tree.case_sensitive = True
 
267
        transform = TreeTransform(tree)
 
268
        self.addCleanup(transform.finalize)
 
269
        transform.new_file('file', transform.root, 'content')
 
270
        result = transform.find_conflicts()
 
271
        self.assertEqual([], result)
 
272
        # Force the tree to report that it is case insensitive, for conflict
 
273
        # generation tests
 
274
        tree.case_sensitive = False
 
275
        result = transform.find_conflicts()
 
276
        self.assertEqual([('duplicate', 'new-1', 'new-2', 'file')], result)
 
277
 
 
278
    def test_resolve_case_insensitive_conflict(self):
 
279
        tree = self.make_branch_and_tree('tree')
 
280
        # Don't try this at home, kids!
 
281
        # Force the tree to report that it is case insensitive, for conflict
 
282
        # resolution tests
 
283
        tree.case_sensitive = False
 
284
        transform = TreeTransform(tree)
 
285
        self.addCleanup(transform.finalize)
 
286
        transform.new_file('file', transform.root, 'content')
 
287
        transform.new_file('FiLe', transform.root, 'content')
 
288
        resolve_conflicts(transform)
 
289
        transform.apply()
 
290
        self.failUnlessExists('tree/file')
 
291
        self.failUnlessExists('tree/FiLe.moved')
 
292
 
 
293
    def test_resolve_checkout_case_conflict(self):
 
294
        tree = self.make_branch_and_tree('tree')
 
295
        # Don't try this at home, kids!
 
296
        # Force the tree to report that it is case insensitive, for conflict
 
297
        # resolution tests
 
298
        tree.case_sensitive = False
 
299
        transform = TreeTransform(tree)
 
300
        self.addCleanup(transform.finalize)
 
301
        transform.new_file('file', transform.root, 'content')
 
302
        transform.new_file('FiLe', transform.root, 'content')
 
303
        resolve_conflicts(transform,
 
304
                          pass_func=lambda t, c: resolve_checkout(t, c, []))
 
305
        transform.apply()
 
306
        self.failUnlessExists('tree/file')
 
307
        self.failUnlessExists('tree/FiLe.moved')
 
308
 
 
309
    def test_apply_case_conflict(self):
 
310
        """Ensure that a transform with case conflicts can always be applied"""
 
311
        tree = self.make_branch_and_tree('tree')
 
312
        transform = TreeTransform(tree)
 
313
        self.addCleanup(transform.finalize)
 
314
        transform.new_file('file', transform.root, 'content')
 
315
        transform.new_file('FiLe', transform.root, 'content')
 
316
        dir = transform.new_directory('dir', transform.root)
 
317
        transform.new_file('dirfile', dir, 'content')
 
318
        transform.new_file('dirFiLe', dir, 'content')
 
319
        resolve_conflicts(transform)
 
320
        transform.apply()
 
321
        self.failUnlessExists('tree/file')
 
322
        if not os.path.exists('tree/FiLe.moved'):
 
323
            self.failUnlessExists('tree/FiLe')
 
324
        self.failUnlessExists('tree/dir/dirfile')
 
325
        if not os.path.exists('tree/dir/dirFiLe.moved'):
 
326
            self.failUnlessExists('tree/dir/dirFiLe')
 
327
 
 
328
    def test_case_insensitive_limbo(self):
 
329
        tree = self.make_branch_and_tree('tree')
 
330
        # Don't try this at home, kids!
 
331
        # Force the tree to report that it is case insensitive
 
332
        tree.case_sensitive = False
 
333
        transform = TreeTransform(tree)
 
334
        self.addCleanup(transform.finalize)
 
335
        dir = transform.new_directory('dir', transform.root)
 
336
        first = transform.new_file('file', dir, 'content')
 
337
        second = transform.new_file('FiLe', dir, 'content')
 
338
        self.assertContainsRe(transform._limbo_name(first), 'new-1/file')
 
339
        self.assertNotContainsRe(transform._limbo_name(second), 'new-1/FiLe')
 
340
 
238
341
    def test_add_del(self):
239
342
        start, root = self.get_transform()
240
343
        start.new_directory('a', root, 'a')
412
515
        self.assertEqual(os.readlink(self.wt.abspath('oz/wizard')),
413
516
                         'wizard-target')
414
517
 
 
518
    def test_unable_create_symlink(self):
 
519
        def tt_helper():
 
520
            wt = self.make_branch_and_tree('.')
 
521
            tt = TreeTransform(wt)  # TreeTransform obtains write lock
 
522
            try:
 
523
                tt.new_symlink('foo', tt.root, 'bar')
 
524
                tt.apply()
 
525
            finally:
 
526
                wt.unlock()
 
527
        os_symlink = getattr(os, 'symlink', None)
 
528
        os.symlink = None
 
529
        try:
 
530
            err = self.assertRaises(errors.UnableCreateSymlink, tt_helper)
 
531
            self.assertEquals(
 
532
                "Unable to create symlink 'foo' on this platform",
 
533
                str(err))
 
534
        finally:
 
535
            if os_symlink:
 
536
                os.symlink = os_symlink
 
537
 
415
538
    def get_conflicted(self):
416
539
        create,root = self.get_transform()
417
540
        create.new_file('dorothy', root, 'dorothy', 'dorothy-id')
560
683
        """
561
684
        transform, root = self.get_transform()
562
685
        wt = transform._tree
 
686
        wt.lock_read()
 
687
        self.addCleanup(wt.unlock)
563
688
        transform.new_file('set_on_creation', root, 'Set on creation', 'soc',
564
689
                           True)
565
690
        sac = transform.new_file('set_after_creation', root,
1170
1295
 
1171
1296
class TestBuildTree(tests.TestCaseWithTransport):
1172
1297
 
1173
 
    def test_build_tree(self):
 
1298
    def test_build_tree_with_symlinks(self):
1174
1299
        self.requireFeature(SymlinkFeature)
1175
1300
        os.mkdir('a')
1176
1301
        a = BzrDir.create_standalone_workingtree('a')
1473
1598
        self.failUnlessExists('a')
1474
1599
        self.failUnlessExists('a/b')
1475
1600
 
 
1601
    def test_resolve_no_parent(self):
 
1602
        wt = self.make_branch_and_tree('.')
 
1603
        tt = TreeTransform(wt)
 
1604
        self.addCleanup(tt.finalize)
 
1605
        parent = tt.trans_id_file_id('parent-id')
 
1606
        tt.new_file('file', parent, 'Contents')
 
1607
        resolve_conflicts(tt)
 
1608
 
1476
1609
 
1477
1610
class TestTransformPreview(tests.TestCaseWithTransport):
1478
1611