Beispiel #1
0
 def test_add_via_symlink(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     self.make_branch_and_tree('source')
     self.build_tree(['source/top.txt'])
     os.symlink('source', 'link')
     out = self.run_bzr(['add', 'link/top.txt'])[0]
     self.assertEqual(out, 'adding top.txt\n')
Beispiel #2
0
    def test_sprout_with_unicode_symlink(self):
        # this tests bug #272444
        # Since the trigger function seems to be set_parent_trees, there exists
        # also a similar test, with name test_unicode_symlink, in class
        # TestSetParents at file per_workingtree/test_parents.py
        self.requireFeature(features.SymlinkFeature(self.test_dir))
        self.requireFeature(features.UnicodeFilenameFeature)

        tree = self.make_branch_and_tree('tree1')

        # The link points to a file whose name is an omega
        # U+03A9 GREEK CAPITAL LETTER OMEGA
        # UTF-8: ce a9  UTF-16BE: 03a9  Decimal: Ω
        target = u'\u03a9'
        link_name = u'\N{Euro Sign}link'
        os.symlink(target, 'tree1/' + link_name)
        tree.add([link_name])

        tree.commit('added a link to a Unicode target')
        tree.controldir.sprout('dest')
        self.assertEqual(target, osutils.readlink('dest/' + link_name))
        tree.lock_read()
        self.addCleanup(tree.unlock)
        # Check that the symlink target is safely round-tripped in the trees.
        self.assertEqual(target, tree.get_symlink_target(link_name))
        self.assertEqual(target,
                         tree.basis_tree().get_symlink_target(link_name))
Beispiel #3
0
 def test_tree_with_subdirs_and_all_content_types(self):
     # currently this test tree requires unicode. It might be good
     # to have it simply stop having the single unicode file in it
     # when dealing with a non-unicode filesystem.
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     tree = self.get_tree_with_subdirs_and_all_content_types()
     tree.lock_read()
     self.addCleanup(tree.unlock)
     self.assertEqual([], tree.get_parent_ids())
     self.assertEqual([], tree.conflicts())
     self.assertEqual([], list(tree.unknowns()))
     # __iter__ has no strongly defined order
     try:
         all_file_ids = set(tree.all_file_ids())
         tree_root = tree.path2id('')
     except AttributeError:
         # doesn't support file ids
         all_file_ids = None
     if tree.has_versioned_directories():
         if all_file_ids is not None:
             self.assertEqual(
                 {
                     tree.path2id(p)
                     for p in [
                         '', '0file', '1top-dir',
                         '1top-dir/1dir-in-1topdir',
                         '1top-dir/0file-in-1topdir', 'symlink',
                         u'2utf\u1234file'
                     ]
                 }, set(tree.all_file_ids()))
         # note that the order of the paths and fileids is deliberately
         # mismatched to ensure that the result order is path based.
         self.assertEqual([('', 'directory'), ('0file', 'file'),
                           ('1top-dir', 'directory'),
                           (u'2utf\u1234file', 'file'),
                           ('symlink', 'symlink'),
                           ('1top-dir/0file-in-1topdir', 'file'),
                           ('1top-dir/1dir-in-1topdir', 'directory')],
                          [(path, node.kind)
                           for path, node in tree.iter_entries_by_dir()])
     else:
         if all_file_ids is not None:
             self.assertEqual(
                 {
                     tree.path2id(p)
                     for p in [
                         '', '0file', '1top-dir',
                         '1top-dir/0file-in-1topdir', 'symlink',
                         u'2utf\u1234file'
                     ]
                 }, set(tree.all_file_ids()))
         # note that the order of the paths and fileids is deliberately
         # mismatched to ensure that the result order is path based.
         self.assertEqual([('', 'directory'), ('0file', 'file'),
                           ('1top-dir', 'directory'),
                           (u'2utf\u1234file', 'file'),
                           ('symlink', 'symlink'),
                           ('1top-dir/0file-in-1topdir', 'file')],
                          [(path, node.kind)
                           for path, node in tree.iter_entries_by_dir()])
Beispiel #4
0
 def prepare_symlink_export(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     work_a = self.make_branch_and_tree('wta')
     os.symlink('target', 'wta/link')
     work_a.add('link')
     work_a.commit('add link')
     tree_a = self.workingtree_to_test_tree(work_a)
     export(tree_a, 'output', self.exporter)
 def test_unicode_symlink_target_summary(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     self.requireFeature(features.UnicodeFilenameFeature)
     tree = self.make_branch_and_tree('tree')
     os.symlink(os.fsencode(u'tree/\u03b2-path'), 'tree/link')
     tree.add(['link'])
     summary = self._convert_tree(tree).path_content_summary('link')
     self.assertEqual(('symlink', None, None, u'tree/\u03b2-path'), summary)
Beispiel #6
0
    def get_tree_with_symlinks(self):
        self.requireFeature(features.SymlinkFeature(self.test_dir))
        tree = self.make_branch_and_tree('tree')
        os.symlink('foo', 'tree/link')
        os.symlink('../bar', 'tree/rel_link')
        os.symlink('/baz/bing', 'tree/abs_link')

        tree.add(['link', 'rel_link', 'abs_link'])
        return self._convert_tree(tree)
Beispiel #7
0
 def test_get_unicode_symlink_target(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     self.requireFeature(features.UnicodeFilenameFeature)
     tree = self.make_branch_and_tree('tree')
     target = u'targ\N{Euro Sign}t'
     os.symlink(target, os.fsencode(u'tree/\u03b2_link'))
     tree.add([u'\u03b2_link'])
     tree.lock_read()
     self.addCleanup(tree.unlock)
     actual = tree.get_symlink_target(u'\u03b2_link')
     self.assertEqual(target, actual)
Beispiel #8
0
 def test_export_symlink(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     work_a = self.make_branch_and_tree('wta')
     os.symlink('target', 'wta/link')
     work_a.add('link')
     work_a.commit('add link')
     tree_a = self.workingtree_to_test_tree(work_a)
     output_path = 'output'
     with open(output_path, 'wb') as f:
         f.writelines(tree_a.archive(self.format, output_path))
     names = self.get_export_names(output_path)
     self.assertIn('link.lnk', names)
    def _test_last_mod_rev_after_content_link_changes(self, link, target,
                                                      newtarget):
        # changing a link changes the last modified.
        self.requireFeature(features.SymlinkFeature(self.test_dir))
        tree = self.make_branch_and_tree('.')
        os.symlink(target, link)

        def change_link():
            os.unlink(link)
            os.symlink(newtarget, link)

        self._add_commit_change_check_changed(tree, (link, link), change_link)
Beispiel #10
0
 def test_remove_no_files_specified_missing_link(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     tree = self._make_tree_and_add(['foo'])
     os.symlink('foo', 'linkname')
     tree.add(['linkname'])
     os.unlink('linkname')
     out, err = self.run_bzr(['rm'])
     self.assertEqual('', out)
     self.assertEqual('removed linkname\n', err)
     # non-missing files not touched:
     self.assertInWorkingTree('foo', tree=tree)
     self.assertPathExists('foo')
     # missing files unversioned
     self.assertNotInWorkingTree('linkname', tree=tree)
 def test_last_modified_revision_after_reparent_link_changes(self):
     # reparenting a link changes the last modified.
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     tree = self.make_branch_and_tree('.')
     os.symlink('target', 'link')
     self._add_commit_reparent_check_changed(tree, 'link')
Beispiel #12
0
 def setUp(self):
     super(TestTreeWithSymlinks, self).setUp()
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     self.tree = self.get_tree_with_subdirs_and_all_content_types()
     self.tree.lock_read()
     self.addCleanup(self.tree.unlock)
Beispiel #13
0
 def setUp(self):
     super(TestSmartAddTree, self).setUp()
     self.requireFeature(features.SymlinkFeature(self.test_dir))
Beispiel #14
0
 def test_add_symlink_to_abspath(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     self.make_branch_and_tree('tree')
     os.symlink(osutils.abspath('target'), 'tree/link')
     out = self.run_bzr(['add', 'tree/link'])[0]
     self.assertEqual(out, 'adding link\n')
Beispiel #15
0
 def setUp(self):
     super(TestKindChanges, self).setUp()
     self.requireFeature(features.SymlinkFeature(self.test_dir))
 def make_link(self, name):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     os.symlink('target', name)
 def test_last_modified_revision_after_converged_merge_link_unchanged(self):
     # merge a link that changed preserves the last modified.
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     tree1 = self.make_branch_and_tree('t1')
     os.symlink('target', 't1/link')
     self._commit_sprout_rename_merge_converged(tree1, 'link')
Beispiel #18
0
 def test_build_tree_symlink(self):
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     self.build_tree_contents([('link@', 'target')])
     self.assertEqual('target', os.readlink('link'))
 def test_last_modified_revision_after_commit_link_unchanged(self):
     # committing without changing a link does not change the last modified.
     self.requireFeature(features.SymlinkFeature(self.test_dir))
     tree = self.make_branch_and_tree('.')
     os.symlink('target', 'link')
     self._add_commit_check_unchanged(tree, 'link')