~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_transform.py

merge shell-like-tests into description resolving conflicts

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
import os
18
 
import stat
19
18
from StringIO import StringIO
20
19
import sys
21
20
 
22
21
from bzrlib import (
23
22
    bencode,
24
23
    errors,
 
24
    filters,
25
25
    generate_ids,
26
26
    osutils,
27
27
    progress,
28
28
    revision as _mod_revision,
29
 
    symbol_versioning,
 
29
    rules,
30
30
    tests,
31
31
    urlutils,
32
32
    )
1868
1868
        self.assertEqual([], list(target.iter_changes(revision_tree)))
1869
1869
        self.assertTrue(source.is_executable('file1-id'))
1870
1870
 
 
1871
    def install_rot13_content_filter(self, pattern):
 
1872
        original_registry = filters._reset_registry()
 
1873
        def restore_registry():
 
1874
            filters._reset_registry(original_registry)
 
1875
        self.addCleanup(restore_registry)
 
1876
        def rot13(chunks, context=None):
 
1877
            return [''.join(chunks).encode('rot13')]
 
1878
        rot13filter = filters.ContentFilter(rot13, rot13)
 
1879
        filters.register_filter_stack_map('rot13', {'yes': [rot13filter]}.get)
 
1880
        os.mkdir(self.test_home_dir + '/.bazaar')
 
1881
        rules_filename = self.test_home_dir + '/.bazaar/rules'
 
1882
        f = open(rules_filename, 'wb')
 
1883
        f.write('[name %s]\nrot13=yes\n' % (pattern,))
 
1884
        f.close()
 
1885
        def uninstall_rules():
 
1886
            os.remove(rules_filename)
 
1887
            rules.reset_rules()
 
1888
        self.addCleanup(uninstall_rules)
 
1889
        rules.reset_rules()
 
1890
 
 
1891
    def test_build_tree_content_filtered_files_are_not_hardlinked(self):
 
1892
        """build_tree will not hardlink files that have content filtering rules
 
1893
        applied to them (but will still hardlink other files from the same tree
 
1894
        if it can).
 
1895
        """
 
1896
        self.requireFeature(HardlinkFeature)
 
1897
        self.install_rot13_content_filter('file1')
 
1898
        source = self.create_ab_tree()
 
1899
        target = self.make_branch_and_tree('target')
 
1900
        revision_tree = source.basis_tree()
 
1901
        revision_tree.lock_read()
 
1902
        self.addCleanup(revision_tree.unlock)
 
1903
        build_tree(revision_tree, target, source, hardlink=True)
 
1904
        target.lock_read()
 
1905
        self.addCleanup(target.unlock)
 
1906
        self.assertEqual([], list(target.iter_changes(revision_tree)))
 
1907
        source_stat = os.stat('source/file1')
 
1908
        target_stat = os.stat('target/file1')
 
1909
        self.assertNotEqual(source_stat, target_stat)
 
1910
        source_stat = os.stat('source/file2')
 
1911
        target_stat = os.stat('target/file2')
 
1912
        self.assertEqualStat(source_stat, target_stat)
 
1913
 
1871
1914
    def test_case_insensitive_build_tree_inventory(self):
1872
1915
        if (tests.CaseInsensitiveFilesystemFeature.available()
1873
1916
            or tests.CaseInsCasePresFilenameFeature.available()):
1951
1994
        branch, tt = self.get_branch_and_transform()
1952
1995
        tt.new_file('file', tt.root, 'contents', 'file-id')
1953
1996
        trans_id = tt.new_directory('dir', tt.root, 'dir-id')
1954
 
        tt.new_symlink('symlink', trans_id, 'target', 'symlink-id')
 
1997
        if SymlinkFeature.available():
 
1998
            tt.new_symlink('symlink', trans_id, 'target', 'symlink-id')
1955
1999
        rev = tt.commit(branch, 'message')
1956
2000
        tree = branch.basis_tree()
1957
2001
        self.assertEqual('file', tree.id2path('file-id'))
1958
2002
        self.assertEqual('contents', tree.get_file_text('file-id'))
1959
2003
        self.assertEqual('dir', tree.id2path('dir-id'))
1960
 
        self.assertEqual('dir/symlink', tree.id2path('symlink-id'))
1961
 
        self.assertEqual('target', tree.get_symlink_target('symlink-id'))
 
2004
        if SymlinkFeature.available():
 
2005
            self.assertEqual('dir/symlink', tree.id2path('symlink-id'))
 
2006
            self.assertEqual('target', tree.get_symlink_target('symlink-id'))
1962
2007
 
1963
2008
    def test_add_unversioned(self):
1964
2009
        branch, tt = self.get_branch_and_transform()
2454
2499
        self.assertEqual(('missing', None, None, None), summary)
2455
2500
 
2456
2501
    def test_file_content_summary_executable(self):
2457
 
        if not osutils.supports_executable():
2458
 
            raise TestNotApplicable()
2459
2502
        preview = self.get_empty_preview()
2460
2503
        path_id = preview.new_file('path', preview.root, 'contents', 'path-id')
2461
2504
        preview.set_executability(True, path_id)
2470
2513
        self.assertIs(None, summary[3])
2471
2514
 
2472
2515
    def test_change_executability(self):
2473
 
        if not osutils.supports_executable():
2474
 
            raise TestNotApplicable()
2475
2516
        tree = self.make_branch_and_tree('tree')
2476
2517
        self.build_tree(['tree/path'])
2477
2518
        tree.add('path')
2491
2532
        # size must be known
2492
2533
        self.assertEqual(len('contents'), summary[1])
2493
2534
        # not executable
2494
 
        if osutils.supports_executable():
2495
 
            self.assertEqual(False, summary[2])
2496
 
        else:
2497
 
            self.assertEqual(None, summary[2])
 
2535
        self.assertEqual(False, summary[2])
2498
2536
        # will not have hash (not cheap to determine)
2499
2537
        self.assertIs(None, summary[3])
2500
2538
 
2759
2797
        branch = self.make_branch('any')
2760
2798
        tree = branch.repository.revision_tree(_mod_revision.NULL_REVISION)
2761
2799
        tt = TransformPreview(tree)
 
2800
        self.addCleanup(tt.finalize)
2762
2801
        foo_id = tt.new_directory('', ROOT_PARENT)
2763
2802
        bar_id = tt.new_file(u'\u1234bar', foo_id, 'contents')
2764
2803
        limbo_path = tt._limbo_name(bar_id)