/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: Andrew Bennetts
  • Date: 2009-06-17 02:02:44 UTC
  • mfrom: (4449 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4452.
  • Revision ID: andrew.bennetts@canonical.com-20090617020244-50aantdf95aakvjx
Merge bzr.dev, resolving NEWS conflict.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import sys
21
21
 
22
22
from bzrlib import (
 
23
    bencode,
23
24
    errors,
24
25
    generate_ids,
25
26
    osutils,
53
54
                              build_tree, get_backup_name,
54
55
                              _FileMover, resolve_checkout,
55
56
                              TransformPreview, create_from_tree)
56
 
from bzrlib.util import bencode
57
57
 
58
58
 
59
59
class TestTreeTransform(tests.TestCaseWithTransport):
525
525
        resolve_conflicts(replace)
526
526
        replace.apply()
527
527
 
528
 
    def test_symlinks(self):
 
528
    def _test_symlinks(self, link_name1,link_target1,
 
529
                       link_name2, link_target2):
 
530
 
 
531
        def ozpath(p): return 'oz/' + p
 
532
 
529
533
        self.requireFeature(SymlinkFeature)
530
 
        transform,root = self.get_transform()
 
534
        transform, root = self.get_transform()
531
535
        oz_id = transform.new_directory('oz', root, 'oz-id')
532
 
        wizard = transform.new_symlink('wizard', oz_id, 'wizard-target',
 
536
        wizard = transform.new_symlink(link_name1, oz_id, link_target1,
533
537
                                       'wizard-id')
534
 
        wiz_id = transform.create_path('wizard2', oz_id)
535
 
        transform.create_symlink('behind_curtain', wiz_id)
 
538
        wiz_id = transform.create_path(link_name2, oz_id)
 
539
        transform.create_symlink(link_target2, wiz_id)
536
540
        transform.version_file('wiz-id2', wiz_id)
537
541
        transform.set_executability(True, wiz_id)
538
542
        self.assertEqual(transform.find_conflicts(),
539
543
                         [('non-file executability', wiz_id)])
540
544
        transform.set_executability(None, wiz_id)
541
545
        transform.apply()
542
 
        self.assertEqual(self.wt.path2id('oz/wizard'), 'wizard-id')
543
 
        self.assertEqual(file_kind(self.wt.abspath('oz/wizard')), 'symlink')
544
 
        self.assertEqual(os.readlink(self.wt.abspath('oz/wizard2')),
545
 
                         'behind_curtain')
546
 
        self.assertEqual(os.readlink(self.wt.abspath('oz/wizard')),
547
 
                         'wizard-target')
 
546
        self.assertEqual(self.wt.path2id(ozpath(link_name1)), 'wizard-id')
 
547
        self.assertEqual('symlink',
 
548
                         file_kind(self.wt.abspath(ozpath(link_name1))))
 
549
        self.assertEqual(link_target2,
 
550
                         osutils.readlink(self.wt.abspath(ozpath(link_name2))))
 
551
        self.assertEqual(link_target1,
 
552
                         osutils.readlink(self.wt.abspath(ozpath(link_name1))))
 
553
 
 
554
    def test_symlinks(self):
 
555
        self._test_symlinks('wizard', 'wizard-target',
 
556
                            'wizard2', 'behind_curtain')
 
557
 
 
558
    def test_symlinks_unicode(self):
 
559
        self.requireFeature(tests.UnicodeFilenameFeature)
 
560
        self._test_symlinks(u'\N{Euro Sign}wizard',
 
561
                            u'wizard-targ\N{Euro Sign}t',
 
562
                            u'\N{Euro Sign}wizard2',
 
563
                            u'b\N{Euro Sign}hind_curtain')
548
564
 
549
565
    def test_unable_create_symlink(self):
550
566
        def tt_helper():
1841
1857
        self.assertTrue(source.is_executable('file1-id'))
1842
1858
 
1843
1859
    def test_case_insensitive_build_tree_inventory(self):
1844
 
        if (not tests.CaseInsensitiveFilesystemFeature.available()
1845
 
            or not tests.CaseInsCasePresFilenameFeature.available()):
 
1860
        if (tests.CaseInsensitiveFilesystemFeature.available()
 
1861
            or tests.CaseInsCasePresFilenameFeature.available()):
1846
1862
            raise tests.UnavailableFeature('Fully case sensitive filesystem')
1847
1863
        source = self.make_branch_and_tree('source')
1848
1864
        self.build_tree(['source/file', 'source/FILE'])
2588
2604
                                                           'tree/foo'))
2589
2605
        self.assertEqual(False, preview_tree.is_executable('baz-id'))
2590
2606
 
 
2607
    def test_commit_preview_tree(self):
 
2608
        tree = self.make_branch_and_tree('tree')
 
2609
        rev_id = tree.commit('rev1')
 
2610
        tree.branch.lock_write()
 
2611
        self.addCleanup(tree.branch.unlock)
 
2612
        tt = TransformPreview(tree)
 
2613
        tt.new_file('file', tt.root, 'contents', 'file_id')
 
2614
        self.addCleanup(tt.finalize)
 
2615
        preview = tt.get_preview_tree()
 
2616
        preview.set_parent_ids([rev_id])
 
2617
        builder = tree.branch.get_commit_builder([rev_id])
 
2618
        list(builder.record_iter_changes(preview, rev_id, tt.iter_changes()))
 
2619
        builder.finish_inventory()
 
2620
        rev2_id = builder.commit('rev2')
 
2621
        rev2_tree = tree.branch.repository.revision_tree(rev2_id)
 
2622
        self.assertEqual('contents', rev2_tree.get_file_text('file_id'))
 
2623
 
2591
2624
 
2592
2625
class FakeSerializer(object):
2593
2626
    """Serializer implementation that simply returns the input.
2688
2721
        self.assertSerializesTo(self.symlink_creation_records(), tt)
2689
2722
 
2690
2723
    def test_deserialize_symlink_creation(self):
 
2724
        self.requireFeature(tests.SymlinkFeature)
2691
2725
        tt = self.get_preview()
2692
2726
        tt.deserialize(iter(self.symlink_creation_records()))
2693
 
        # XXX readlink should be returning unicode, not utf-8
2694
 
        foo_content = os.readlink(tt._limbo_name('new-1')).decode('utf-8')
 
2727
        abspath = tt._limbo_name('new-1')
 
2728
        foo_content = osutils.readlink(abspath)
2695
2729
        self.assertEqual(u'bar\u1234', foo_content)
2696
2730
 
2697
2731
    def make_destruction_preview(self):