예제 #1
0
 def test_list_files(self):
     tree = self.make_branch_and_tree('.')
     self.build_tree(['dir/', 'file'])
     if has_symlinks():
         os.symlink('target', 'symlink')
     tree.lock_read()
     files = list(tree.list_files())
     tree.unlock()
     self.assertEqual(files[0], ('dir', '?', 'directory', None, TreeDirectory()))
     self.assertEqual(files[1], ('file', '?', 'file', None, TreeFile()))
     if has_symlinks():
         self.assertEqual(files[2], ('symlink', '?', 'symlink', None, TreeLink()))
예제 #2
0
 def test_list_files(self):
     tree = self.make_branch_and_tree('.')
     self.build_tree(['dir/', 'file'])
     if has_symlinks():
         os.symlink('target', 'symlink')
     tree.lock_read()
     files = list(tree.list_files())
     tree.unlock()
     self.assertEqual(files[0],
                      ('dir', '?', 'directory', None, TreeDirectory()))
     self.assertEqual(files[1], ('file', '?', 'file', None, TreeFile()))
     if has_symlinks():
         self.assertEqual(files[2],
                          ('symlink', '?', 'symlink', None, TreeLink()))
예제 #3
0
 def test_detect_real_kind(self):
     # working trees report the real kind of the file on disk, not the kind
     # they had when they were first added
     # create one file of every interesting type
     tree = self.make_branch_and_tree('.')
     self.build_tree(['file', 'directory/'])
     names = ['file', 'directory']
     if has_symlinks():
         os.symlink('target', 'symlink')
         names.append('symlink')
     tree.add(names, [n + '-id' for n in names])
     if tree.supports_tree_reference():
         sub_tree = self.make_branch_and_tree('tree-reference')
         sub_tree.set_root_id('tree-reference-id')
         sub_tree.commit('message')
         names.append('tree-reference')
         tree.add_reference(sub_tree)
     # now when we first look, we should see everything with the same kind
     # with which they were initially added
     for n in names:
         actual_kind = tree.kind(n + '-id')
         self.assertEqual(n, actual_kind)
     # move them around so the names no longer correspond to the types
     os.rename(names[0], 'tmp')
     for i in range(1, len(names)):
         os.rename(names[i], names[i-1])
     os.rename('tmp', names[-1])
     # now look and expect to see the correct types again
     for i in range(len(names)):
         actual_kind = tree.kind(names[i-1] + '-id')
         expected_kind = names[i]
         self.assertEqual(expected_kind, actual_kind)
예제 #4
0
 def test_detect_real_kind(self):
     # working trees report the real kind of the file on disk, not the kind
     # they had when they were first added
     # create one file of every interesting type
     tree = self.make_branch_and_tree('.')
     self.build_tree(['file', 'directory/'])
     names = ['file', 'directory']
     if has_symlinks():
         os.symlink('target', 'symlink')
         names.append('symlink')
     tree.add(names, [n + '-id' for n in names])
     if tree.supports_tree_reference():
         sub_tree = self.make_branch_and_tree('tree-reference')
         sub_tree.set_root_id('tree-reference-id')
         sub_tree.commit('message')
         names.append('tree-reference')
         tree.add_reference(sub_tree)
     # now when we first look, we should see everything with the same kind
     # with which they were initially added
     for n in names:
         actual_kind = tree.kind(n + '-id')
         self.assertEqual(n, actual_kind)
     # move them around so the names no longer correspond to the types
     os.rename(names[0], 'tmp')
     for i in range(1, len(names)):
         os.rename(names[i], names[i - 1])
     os.rename('tmp', names[-1])
     # now look and expect to see the correct types again
     for i in range(len(names)):
         actual_kind = tree.kind(names[i - 1] + '-id')
         expected_kind = names[i]
         self.assertEqual(expected_kind, actual_kind)
예제 #5
0
 def test_walkdir_subtree(self):
     tree = self.get_tree_with_subdirs_and_all_supported_content_types(has_symlinks())
     # test that its iterable by iterating
     result = []
     tree.lock_read()
     expected_dirblocks = self.get_all_subdirs_expected(tree, has_symlinks())[1:]
     for dirinfo, block in tree.walkdirs('1top-dir'):
         newblock = []
         for row in block:
             if row[4] is not None:
                 newblock.append(row[0:3] + (None,) + row[4:])
             else:
                 newblock.append(row)
         result.append((dirinfo, newblock))
     tree.unlock()
     # check each return value for debugging ease.
     for pos, item in enumerate(expected_dirblocks):
         self.assertEqual(item, result[pos])
     self.assertEqual(len(expected_dirblocks), len(result))
예제 #6
0
 def test_walkdir_subtree(self):
     tree = self.get_tree_with_subdirs_and_all_supported_content_types(
         has_symlinks())
     # test that its iterable by iterating
     result = []
     tree.lock_read()
     expected_dirblocks = self.get_all_subdirs_expected(
         tree, has_symlinks())[1:]
     for dirinfo, block in tree.walkdirs('1top-dir'):
         newblock = []
         for row in block:
             if row[4] is not None:
                 newblock.append(row[0:3] + (None, ) + row[4:])
             else:
                 newblock.append(row)
         result.append((dirinfo, newblock))
     tree.unlock()
     # check each return value for debugging ease.
     for pos, item in enumerate(expected_dirblocks):
         self.assertEqual(item, result[pos])
     self.assertEqual(len(expected_dirblocks), len(result))
예제 #7
0
    def test_revert(self):
        self.run_bzr('init')

        with file('hello', 'wt') as f:
            f.write('foo')
        self.run_bzr('add hello')
        self.run_bzr('commit -m setup hello')

        with file('goodbye', 'wt') as f:
            f.write('baz')
        self.run_bzr('add goodbye')
        self.run_bzr('commit -m setup goodbye')

        with file('hello', 'wt') as f:
            f.write('bar')
        with file('goodbye', 'wt') as f:
            f.write('qux')
        self.run_bzr('revert hello')
        self.check_file_contents('hello', 'foo')
        self.check_file_contents('goodbye', 'qux')
        self.run_bzr('revert')
        self.check_file_contents('goodbye', 'baz')

        os.mkdir('revertdir')
        self.run_bzr('add revertdir')
        self.run_bzr('commit -m f')
        os.rmdir('revertdir')
        self.run_bzr('revert')

        if osutils.has_symlinks():
            os.symlink('/unlikely/to/exist', 'symlink')
            self.run_bzr('add symlink')
            self.run_bzr('commit -m f')
            os.unlink('symlink')
            self.run_bzr('revert')
            self.assertPathExists('symlink')
            os.unlink('symlink')
            os.symlink('a-different-path', 'symlink')
            self.run_bzr('revert')
            self.assertEqual('/unlikely/to/exist', os.readlink('symlink'))
        else:
            self.log("skipping revert symlink tests")

        with file('hello', 'wt') as f:
            f.write('xyz')
        self.run_bzr('commit -m xyz hello')
        self.run_bzr('revert -r 1 hello')
        self.check_file_contents('hello', 'foo')
        self.run_bzr('revert hello')
        self.check_file_contents('hello', 'xyz')
        os.chdir('revertdir')
        self.run_bzr('revert')
        os.chdir('..')
예제 #8
0
    def test_symlinks(self):
        if has_symlinks() is False:
            return
        os.mkdir('branch')
        ControlDir.create_standalone_workingtree('branch')
        os.symlink(os.path.realpath('no-die-please'), 'branch/die-please')
        os.mkdir('no-die-please')
        self.assertPathExists('branch/die-please')
        os.mkdir('no-die-please/child')

        clean_tree('branch', unknown=True, no_prompt=True)
        self.assertPathExists('no-die-please')
        self.assertPathExists('no-die-please/child')
    def test_symlinks(self):
        if has_symlinks() is False:
            return
        os.mkdir('branch')
        ControlDir.create_standalone_workingtree('branch')
        os.symlink(os.path.realpath('no-die-please'), 'branch/die-please')
        os.mkdir('no-die-please')
        self.assertPathExists('branch/die-please')
        os.mkdir('no-die-please/child')

        clean_tree('branch', unknown=True, no_prompt=True)
        self.assertPathExists('no-die-please')
        self.assertPathExists('no-die-please/child')
예제 #10
0
    def test_revert(self):
        self.run_bzr('init')

        with file('hello', 'wt') as f: f.write('foo')
        self.run_bzr('add hello')
        self.run_bzr('commit -m setup hello')

        with file('goodbye', 'wt') as f: f.write('baz')
        self.run_bzr('add goodbye')
        self.run_bzr('commit -m setup goodbye')

        with file('hello', 'wt') as f: f.write('bar')
        with file('goodbye', 'wt') as f: f.write('qux')
        self.run_bzr('revert hello')
        self.check_file_contents('hello', 'foo')
        self.check_file_contents('goodbye', 'qux')
        self.run_bzr('revert')
        self.check_file_contents('goodbye', 'baz')

        os.mkdir('revertdir')
        self.run_bzr('add revertdir')
        self.run_bzr('commit -m f')
        os.rmdir('revertdir')
        self.run_bzr('revert')

        if osutils.has_symlinks():
            os.symlink('/unlikely/to/exist', 'symlink')
            self.run_bzr('add symlink')
            self.run_bzr('commit -m f')
            os.unlink('symlink')
            self.run_bzr('revert')
            self.assertPathExists('symlink')
            os.unlink('symlink')
            os.symlink('a-different-path', 'symlink')
            self.run_bzr('revert')
            self.assertEqual('/unlikely/to/exist',
                             os.readlink('symlink'))
        else:
            self.log("skipping revert symlink tests")

        with file('hello', 'wt') as f: f.write('xyz')
        self.run_bzr('commit -m xyz hello')
        self.run_bzr('revert -r 1 hello')
        self.check_file_contents('hello', 'foo')
        self.run_bzr('revert hello')
        self.check_file_contents('hello', 'xyz')
        os.chdir('revertdir')
        self.run_bzr('revert')
        os.chdir('..')
예제 #11
0
    def test_bzr(self):
        from os import chdir, mkdir
        from os.path import exists

        progress = self.log

        progress("basic branch creation")
        mkdir('branch1')
        chdir('branch1')
        self.run_bzr('init')

        self.assertIsSameRealPath(self.run_bzr('root')[0].rstrip(),
                                  osutils.pathjoin(self.test_dir, 'branch1'))

        progress("status of new file")

        f = file('test.txt', 'wt')
        f.write('hello world!\n')
        f.close()

        self.assertEquals(self.run_bzr('unknowns')[0], 'test.txt\n')

        out = self.run_bzr("status")[0]
        self.assertEquals(out, 'unknown:\n  test.txt\n')

        f = file('test2.txt', 'wt')
        f.write('goodbye cruel world...\n')
        f.close()

        out = self.run_bzr("status test.txt")[0]
        self.assertEquals(out, "unknown:\n  test.txt\n")

        out = self.run_bzr("status")[0]
        self.assertEquals(out, ("unknown:\n" "  test.txt\n" "  test2.txt\n"))

        os.unlink('test2.txt')

        progress("command aliases")
        out = self.run_bzr("st")[0]
        self.assertEquals(out, ("unknown:\n" "  test.txt\n"))

        out = self.run_bzr("stat")[0]
        self.assertEquals(out, ("unknown:\n" "  test.txt\n"))

        progress("command help")
        self.run_bzr("help st")
        self.run_bzr("help")
        self.run_bzr("help commands")
        self.run_bzr("help slartibartfast", retcode=3)

        out = self.run_bzr("help ci")[0]
        out.index('Aliases:  ci, checkin\n')

        f = file('hello.txt', 'wt')
        f.write('some nice new content\n')
        f.close()

        self.run_bzr("add hello.txt")

        f = file('msg.tmp', 'wt')
        f.write('this is my new commit\nand it has multiple lines, for fun')
        f.close()

        self.run_bzr('commit -F msg.tmp')

        self.assertEquals(self.run_bzr('revno')[0], '1\n')
        self.run_bzr('export -r 1 export-1.tmp')
        self.run_bzr('export export.tmp')

        self.run_bzr('log')
        self.run_bzr('log -v')
        self.run_bzr('log -v --forward')
        self.run_bzr('log -m', retcode=3)
        log_out = self.run_bzr('log -m commit')[0]
        self.assert_("this is my new commit\n  and" in log_out)
        self.assert_("rename nested" not in log_out)
        self.assert_('revision-id' not in log_out)
        self.assert_('revision-id' in self.run_bzr('log --show-ids -m commit')[0])

        log_out = self.run_bzr('log --line')[0]
        # determine the widest line we want
        max_width = osutils.terminal_width()
        if max_width is not None:
            for line in log_out.splitlines():
                self.assert_(len(line) <= max_width - 1, len(line))
        self.assert_("this is my new commit and" not in log_out)
        self.assert_("this is my new commit" in log_out)

        progress("file with spaces in name")
        mkdir('sub directory')
        with file('sub directory/file with spaces ', 'wt') as f: f.write('see how this works\n')
        self.run_bzr('add .')
        self.run_bzr('diff', retcode=1)
        self.run_bzr('commit -m add-spaces')
        self.run_bzr('check')

        self.run_bzr('log')
        self.run_bzr('log --forward')

        self.run_bzr('info')

        if osutils.has_symlinks():
            progress("symlinks")
            mkdir('symlinks')
            chdir('symlinks')
            self.run_bzr('init')
            os.symlink("NOWHERE1", "link1")
            self.run_bzr('add link1')
            self.assertEquals(self.run_bzr('unknowns')[0], '')
            self.run_bzr(['commit', '-m', '1: added symlink link1'])

            mkdir('d1')
            self.run_bzr('add d1')
            self.assertEquals(self.run_bzr('unknowns')[0], '')
            os.symlink("NOWHERE2", "d1/link2")
            self.assertEquals(self.run_bzr('unknowns')[0], 'd1/link2\n')
            # is d1/link2 found when adding d1
            self.run_bzr('add d1')
            self.assertEquals(self.run_bzr('unknowns')[0], '')
            os.symlink("NOWHERE3", "d1/link3")
            self.assertEquals(self.run_bzr('unknowns')[0], 'd1/link3\n')
            self.run_bzr(['commit', '-m', '2: added dir, symlink'])

            self.run_bzr('rename d1 d2')
            self.run_bzr('move d2/link2 .')
            self.run_bzr('move link1 d2')
            self.assertEquals(os.readlink("./link2"), "NOWHERE2")
            self.assertEquals(os.readlink("d2/link1"), "NOWHERE1")
            self.run_bzr('add d2/link3')
            self.run_bzr('diff', retcode=1)
            self.run_bzr(['commit', '-m',
                          '3: rename of dir, move symlinks, add link3'])

            os.unlink("link2")
            os.symlink("TARGET 2", "link2")
            os.unlink("d2/link1")
            os.symlink("TARGET 1", "d2/link1")
            self.run_bzr('diff', retcode=1)
            self.assertEquals(self.run_bzr("relpath d2/link1")[0], "d2/link1\n")
            self.run_bzr(['commit', '-m', '4: retarget of two links'])

            self.run_bzr('remove --keep d2/link1')
            self.assertEquals(self.run_bzr('unknowns')[0], 'd2/link1\n')
            self.run_bzr(['commit', '-m', '5: remove d2/link1'])
            # try with the rm alias
            self.run_bzr('add d2/link1')
            self.run_bzr(['commit', '-m', '6: add d2/link1'])
            self.run_bzr('rm --keep d2/link1')
            self.assertEquals(self.run_bzr('unknowns')[0], 'd2/link1\n')
            self.run_bzr(['commit', '-m', '7: remove d2/link1'])

            os.mkdir("d1")
            self.run_bzr('add d1')
            self.run_bzr('rename d2/link3 d1/link3new')
            self.assertEquals(self.run_bzr('unknowns')[0], 'd2/link1\n')
            self.run_bzr(['commit', '-m',
                          '8: remove d2/link1, move/rename link3'])

            self.run_bzr('check')

            self.run_bzr('export -r 1 exp1.tmp')
            chdir("exp1.tmp")
            self.assertEquals(listdir_sorted("."), [ "link1" ])
            self.assertEquals(os.readlink("link1"), "NOWHERE1")
            chdir("..")

            self.run_bzr('export -r 2 exp2.tmp')
            chdir("exp2.tmp")
            self.assertEquals(listdir_sorted("."), [ "d1", "link1" ])
            chdir("..")

            self.run_bzr('export -r 3 exp3.tmp')
            chdir("exp3.tmp")
            self.assertEquals(listdir_sorted("."), [ "d2", "link2" ])
            self.assertEquals(listdir_sorted("d2"), [ "link1", "link3" ])
            self.assertEquals(os.readlink("d2/link1"), "NOWHERE1")
            self.assertEquals(os.readlink("link2")   , "NOWHERE2")
            chdir("..")

            self.run_bzr('export -r 4 exp4.tmp')
            chdir("exp4.tmp")
            self.assertEquals(listdir_sorted("."), [ "d2", "link2" ])
            self.assertEquals(os.readlink("d2/link1"), "TARGET 1")
            self.assertEquals(os.readlink("link2")   , "TARGET 2")
            self.assertEquals(listdir_sorted("d2"), [ "link1", "link3" ])
            chdir("..")

            self.run_bzr('export -r 5 exp5.tmp')
            chdir("exp5.tmp")
            self.assertEquals(listdir_sorted("."), [ "d2", "link2" ])
            self.assert_(os.path.islink("link2"))
            self.assert_(listdir_sorted("d2")== [ "link3" ])
            chdir("..")

            self.run_bzr('export -r 8 exp6.tmp')
            chdir("exp6.tmp")
            self.assertEqual(listdir_sorted("."), [ "d1", "d2", "link2"])
            self.assertEquals(listdir_sorted("d1"), [ "link3new" ])
            self.assertEquals(listdir_sorted("d2"), [])
            self.assertEquals(os.readlink("d1/link3new"), "NOWHERE3")
            chdir("..")
        else:
            progress("skipping symlink tests")
예제 #12
0
 def _probe(self):
     return osutils.has_symlinks()
예제 #13
0
    def test_bzr(self):
        from os import chdir, mkdir
        from os.path import exists

        progress = self.log

        progress("basic branch creation")
        mkdir('branch1')
        chdir('branch1')
        self.run_bzr('init')

        self.assertIsSameRealPath(
            self.run_bzr('root')[0].rstrip(),
            osutils.pathjoin(self.test_dir, 'branch1'))

        progress("status of new file")

        f = file('test.txt', 'wt')
        f.write('hello world!\n')
        f.close()

        self.assertEqual(self.run_bzr('unknowns')[0], 'test.txt\n')

        out = self.run_bzr("status")[0]
        self.assertEqual(out, 'unknown:\n  test.txt\n')

        f = file('test2.txt', 'wt')
        f.write('goodbye cruel world...\n')
        f.close()

        out = self.run_bzr("status test.txt")[0]
        self.assertEqual(out, "unknown:\n  test.txt\n")

        out = self.run_bzr("status")[0]
        self.assertEqual(out, ("unknown:\n" "  test.txt\n" "  test2.txt\n"))

        os.unlink('test2.txt')

        progress("command aliases")
        out = self.run_bzr("st")[0]
        self.assertEqual(out, ("unknown:\n" "  test.txt\n"))

        out = self.run_bzr("stat")[0]
        self.assertEqual(out, ("unknown:\n" "  test.txt\n"))

        progress("command help")
        self.run_bzr("help st")
        self.run_bzr("help")
        self.run_bzr("help commands")
        self.run_bzr("help slartibartfast", retcode=3)

        out = self.run_bzr("help ci")[0]
        out.index('Aliases:  ci, checkin\n')

        f = file('hello.txt', 'wt')
        f.write('some nice new content\n')
        f.close()

        self.run_bzr("add hello.txt")

        f = file('msg.tmp', 'wt')
        f.write('this is my new commit\nand it has multiple lines, for fun')
        f.close()

        self.run_bzr('commit -F msg.tmp')

        self.assertEqual(self.run_bzr('revno')[0], '1\n')
        self.run_bzr('export -r 1 export-1.tmp')
        self.run_bzr('export export.tmp')

        self.run_bzr('log')
        self.run_bzr('log -v')
        self.run_bzr('log -v --forward')
        self.run_bzr('log -m', retcode=3)
        log_out = self.run_bzr('log -m commit')[0]
        self.assertTrue("this is my new commit\n  and" in log_out)
        self.assertTrue("rename nested" not in log_out)
        self.assertTrue('revision-id' not in log_out)
        self.assertTrue(
            'revision-id' in self.run_bzr('log --show-ids -m commit')[0])

        log_out = self.run_bzr('log --line')[0]
        # determine the widest line we want
        max_width = osutils.terminal_width()
        if max_width is not None:
            for line in log_out.splitlines():
                self.assertTrue(len(line) <= max_width - 1, len(line))
        self.assertTrue("this is my new commit and" not in log_out)
        self.assertTrue("this is my new commit" in log_out)

        progress("file with spaces in name")
        mkdir('sub directory')
        with file('sub directory/file with spaces ', 'wt') as f:
            f.write('see how this works\n')
        self.run_bzr('add .')
        self.run_bzr('diff', retcode=1)
        self.run_bzr('commit -m add-spaces')
        self.run_bzr('check')

        self.run_bzr('log')
        self.run_bzr('log --forward')

        self.run_bzr('info')

        if osutils.has_symlinks():
            progress("symlinks")
            mkdir('symlinks')
            chdir('symlinks')
            self.run_bzr('init')
            os.symlink("NOWHERE1", "link1")
            self.run_bzr('add link1')
            self.assertEqual(self.run_bzr('unknowns')[0], '')
            self.run_bzr(['commit', '-m', '1: added symlink link1'])

            mkdir('d1')
            self.run_bzr('add d1')
            self.assertEqual(self.run_bzr('unknowns')[0], '')
            os.symlink("NOWHERE2", "d1/link2")
            self.assertEqual(self.run_bzr('unknowns')[0], 'd1/link2\n')
            # is d1/link2 found when adding d1
            self.run_bzr('add d1')
            self.assertEqual(self.run_bzr('unknowns')[0], '')
            os.symlink("NOWHERE3", "d1/link3")
            self.assertEqual(self.run_bzr('unknowns')[0], 'd1/link3\n')
            self.run_bzr(['commit', '-m', '2: added dir, symlink'])

            self.run_bzr('rename d1 d2')
            self.run_bzr('move d2/link2 .')
            self.run_bzr('move link1 d2')
            self.assertEqual(os.readlink("./link2"), "NOWHERE2")
            self.assertEqual(os.readlink("d2/link1"), "NOWHERE1")
            self.run_bzr('add d2/link3')
            self.run_bzr('diff', retcode=1)
            self.run_bzr(
                ['commit', '-m', '3: rename of dir, move symlinks, add link3'])

            os.unlink("link2")
            os.symlink("TARGET 2", "link2")
            os.unlink("d2/link1")
            os.symlink("TARGET 1", "d2/link1")
            self.run_bzr('diff', retcode=1)
            self.assertEqual(self.run_bzr("relpath d2/link1")[0], "d2/link1\n")
            self.run_bzr(['commit', '-m', '4: retarget of two links'])

            self.run_bzr('remove --keep d2/link1')
            self.assertEqual(self.run_bzr('unknowns')[0], 'd2/link1\n')
            self.run_bzr(['commit', '-m', '5: remove d2/link1'])
            # try with the rm alias
            self.run_bzr('add d2/link1')
            self.run_bzr(['commit', '-m', '6: add d2/link1'])
            self.run_bzr('rm --keep d2/link1')
            self.assertEqual(self.run_bzr('unknowns')[0], 'd2/link1\n')
            self.run_bzr(['commit', '-m', '7: remove d2/link1'])

            os.mkdir("d1")
            self.run_bzr('add d1')
            self.run_bzr('rename d2/link3 d1/link3new')
            self.assertEqual(self.run_bzr('unknowns')[0], 'd2/link1\n')
            self.run_bzr(
                ['commit', '-m', '8: remove d2/link1, move/rename link3'])

            self.run_bzr('check')

            self.run_bzr('export -r 1 exp1.tmp')
            chdir("exp1.tmp")
            self.assertEqual(listdir_sorted("."), ["link1"])
            self.assertEqual(os.readlink("link1"), "NOWHERE1")
            chdir("..")

            self.run_bzr('export -r 2 exp2.tmp')
            chdir("exp2.tmp")
            self.assertEqual(listdir_sorted("."), ["d1", "link1"])
            chdir("..")

            self.run_bzr('export -r 3 exp3.tmp')
            chdir("exp3.tmp")
            self.assertEqual(listdir_sorted("."), ["d2", "link2"])
            self.assertEqual(listdir_sorted("d2"), ["link1", "link3"])
            self.assertEqual(os.readlink("d2/link1"), "NOWHERE1")
            self.assertEqual(os.readlink("link2"), "NOWHERE2")
            chdir("..")

            self.run_bzr('export -r 4 exp4.tmp')
            chdir("exp4.tmp")
            self.assertEqual(listdir_sorted("."), ["d2", "link2"])
            self.assertEqual(os.readlink("d2/link1"), "TARGET 1")
            self.assertEqual(os.readlink("link2"), "TARGET 2")
            self.assertEqual(listdir_sorted("d2"), ["link1", "link3"])
            chdir("..")

            self.run_bzr('export -r 5 exp5.tmp')
            chdir("exp5.tmp")
            self.assertEqual(listdir_sorted("."), ["d2", "link2"])
            self.assertTrue(os.path.islink("link2"))
            self.assertTrue(listdir_sorted("d2") == ["link3"])
            chdir("..")

            self.run_bzr('export -r 8 exp6.tmp')
            chdir("exp6.tmp")
            self.assertEqual(listdir_sorted("."), ["d1", "d2", "link2"])
            self.assertEqual(listdir_sorted("d1"), ["link3new"])
            self.assertEqual(listdir_sorted("d2"), [])
            self.assertEqual(os.readlink("d1/link3new"), "NOWHERE3")
            chdir("..")
        else:
            progress("skipping symlink tests")
예제 #14
0
            self._translate_error(e, path)

    if osutils.host_os_dereferences_symlinks():
        def readlink(self, relpath):
            """See Transport.readlink."""
            return osutils.readlink(self._abspath(relpath))

    if osutils.hardlinks_good():
        def hardlink(self, source, link_name):
            """See Transport.link."""
            try:
                os.link(self._abspath(source), self._abspath(link_name))
            except (IOError, OSError), e:
                self._translate_error(e, source)

    if osutils.has_symlinks():
        def symlink(self, source, link_name):
            """See Transport.symlink."""
            abs_link_dirpath = urlutils.dirname(self.abspath(link_name))
            source_rel = urlutils.file_relpath(
                urlutils.strip_trailing_slash(abs_link_dirpath),
                urlutils.strip_trailing_slash(self.abspath(source))
            )

            try:
                os.symlink(source_rel, self._abspath(link_name))
            except (IOError, OSError), e:
                self._translate_error(e, source_rel)

    def _can_roundtrip_unix_modebits(self):
        if sys.platform == 'win32':