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')
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))
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()])
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)
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)
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)
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)
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')
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)
def setUp(self): super(TestSmartAddTree, self).setUp() self.requireFeature(features.SymlinkFeature(self.test_dir))
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')
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')
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')