Exemplo n.º 1
0
    def test_shared_import(self):
        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)

        self.assertTrue(Repository.open("e").is_shared())
Exemplo n.º 2
0
    def test_shared_import_continue_branch(self):
        oldrepos = Repository.open(self.repos_url)
        convert_repository(oldrepos,
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)

        mapping = oldrepos.get_mapping()

        dc = self.get_commit_editor()
        trunk = dc.open_dir("trunk")
        trunk.open_file("trunk/file").modify()
        dc.close()

        self.assertEqual(
            Repository.open(self.repos_url).generate_revision_id(
                2, u"trunk", mapping),
            Branch.open("e/trunk").last_revision())

        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)

        self.assertEqual(
            Repository.open(self.repos_url).generate_revision_id(
                3, u"trunk", mapping),
            Branch.open("e/trunk").last_revision())
Exemplo n.º 3
0
    def test_notshared_import(self):
        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=False)

        self.assertRaises(NotBranchError, Repository.open, "e")
Exemplo n.º 4
0
    def test_dumpfile_open_empty(self):
        dumpfile = os.path.join(self.test_dir, "dumpfile")
        open(dumpfile, 'w').write("""SVN-fs-dump-format-version: 2

UUID: 6987ef2d-cd6b-461f-9991-6f1abef3bd59

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2006-07-02T13:14:51.972532Z
PROPS-END
""")
        branch_path = os.path.join(self.test_dir, "f")
        repos = self.load_dumpfile(dumpfile, 'g')
        convert_repository(repos,
                           branch_path,
                           RootLayout(),
                           remember_parent=False)
        branch = Repository.open(branch_path)
        self.assertEqual(len(branch.all_revision_ids()), 1)
        b = Branch.open(branch_path)
        self.assertEquals(1, b.revno())
        self.assertEquals(None, b.get_parent())
Exemplo n.º 5
0
 def test_simple(self):
     convert_repository(Repository.open(self.repos_url),
                        os.path.join(self.test_dir, "e"), TrunkLayout(0))
     self.assertTrue(
         os.path.isdir(os.path.join(self.test_dir, "e", "trunk")))
     self.assertTrue(
         os.path.isdir(
             os.path.join(self.test_dir, "e", "branches", "abranch")))
Exemplo n.º 6
0
    def test_shared_import_rootlayout_empty(self):
        dir = ControlDir.create("e")
        dir.create_repository(shared=True)

        convert_repository(Repository.open(self.repos_url),
                           "e",
                           RootLayout(),
                           create_shared_repo=True)
Exemplo n.º 7
0
 def test_shared_import_continue_with_wt(self):
     convert_repository(Repository.open(self.repos_url),
                        "e",
                        TrunkLayout(0),
                        working_trees=True)
     convert_repository(Repository.open(self.repos_url),
                        "e",
                        TrunkLayout(0),
                        working_trees=True)
Exemplo n.º 8
0
    def test_shared_import_continue(self):
        dir = ControlDir.create("e")
        dir.create_repository(shared=True)

        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)

        self.assertTrue(Repository.open("e").is_shared())
Exemplo n.º 9
0
 def test_sets_parent_urls(self):
     convert_repository(Repository.open(self.repos_url),
                        "e",
                        TrunkLayout(0),
                        all=False,
                        create_shared_repo=True)
     self.assertEquals(self.repos_url + "/trunk",
                       Branch.open("e/trunk").get_parent())
     self.assertEquals(self.repos_url + "/branches/abranch",
                       Branch.open("e/branches/abranch").get_parent())
Exemplo n.º 10
0
 def test_convert_simple(self):
     oldrepos = Repository.open(self.repos_url)
     convert_repository(oldrepos,
                        "e",
                        TrunkLayout(1),
                        prefix=u"base",
                        create_shared_repo=True)
     self.assertTrue(os.path.exists("e/trunk"))
     self.assertTrue(os.path.exists("e/branches/abranch"))
     self.assertFalse(os.path.exists("e/base"))
Exemplo n.º 11
0
    def test_shared_import_without_wt(self):
        dir = ControlDir.create("e")
        dir.create_repository(shared=True)

        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True,
                           working_trees=False)

        self.assertFalse(
            os.path.isfile(os.path.join(self.test_dir, "e", "trunk", "file")))
Exemplo n.º 12
0
    def test_fetch_filebranch(self):
        dc = self.get_commit_editor()
        bs = dc.open_dir("branches")
        bs.add_file("branches/somebranch").modify('data')
        dc.close()

        oldrepos = Repository.open(self.repos_url)
        convert_repository(oldrepos, "e", TrunkLayout(0))
        newrepos = Repository.open("e")
        oldrepos.set_layout(TrunkLayout(0))
        self.assertFalse(
            newrepos.has_revision(
                oldrepos.generate_revision_id(2, u"branches/somebranch",
                                              oldrepos.get_mapping())))
Exemplo n.º 13
0
    def test_shared_import_remove_nokeep(self):
        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)

        dc = self.get_commit_editor()
        dc.delete("trunk")
        dc.close()

        self.assertTrue(os.path.exists("e/trunk"))

        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)

        self.assertFalse(os.path.exists("e/trunk"))
Exemplo n.º 14
0
    def test_parent_branch_outside_prefix(self):
        dc = self.get_commit_editor()

        foo = dc.add_dir("foo")
        foo.add_dir("foo/trunk")
        dc.close()

        dc = self.get_commit_editor()
        bar = dc.add_dir("bar")
        bar.add_dir("bar/trunk", "foo/trunk")
        dc.close()

        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(1),
                           all=True,
                           create_shared_repo=True,
                           prefix=u"bar")
Exemplo n.º 15
0
    def test_shared_import_continue_remove(self):
        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)

        dc = self.get_commit_editor()
        dc.delete("trunk")
        dc.close()

        dc = self.get_commit_editor()
        trunk = dc.add_dir("trunk")
        trunk.add_file("trunk/file").modify()
        dc.close()

        convert_repository(Repository.open(self.repos_url),
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True)
Exemplo n.º 16
0
    def test_shared_import_old_repos_fails(self):
        dir = ControlDir.create("e",
                                format=format_registry.make_controldir('knit'))
        dir.create_repository(shared=True)

        self.assertRaises(
            IncompatibleRepositories,
            lambda: convert_repository(Repository.open(self.repos_url),
                                       "e",
                                       TrunkLayout(0),
                                       create_shared_repo=True,
                                       working_trees=False))
Exemplo n.º 17
0
    def test_dumpfile_open_empty_trunk(self):
        dumpfile = os.path.join(self.test_dir, "dumpfile")
        open(dumpfile, 'w').write("""SVN-fs-dump-format-version: 2

UUID: 6987ef2d-cd6b-461f-9991-6f1abef3bd59

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2006-07-02T13:14:51.972532Z
PROPS-END
""")
        branch_path = os.path.join(self.test_dir, "f")
        repos = self.load_dumpfile(dumpfile, 'g')
        convert_repository(repos, branch_path, TrunkLayout(0))
        repository = Repository.open(branch_path)
        self.assertEqual([], repository.all_revision_ids())
        self.assertRaises(NotBranchError, Branch.open, branch_path)
Exemplo n.º 18
0
    def test_fetch_filter(self):
        dc = self.get_commit_editor()
        branches = dc.open_dir("branches")
        dc.add_dir("branches/somebranch")
        dc.add_file("branches/somebranch/somefile").modify('data')
        dc.close()

        dc = self.get_commit_editor()
        branches = dc.open_dir("branches")
        ab = branches.add_dir("branches/anotherbranch")
        ab.add_file("branches/anotherbranch/somefile").modify('data')
        dc.close()

        oldrepos = Repository.open(self.repos_url)
        convert_repository(oldrepos,
                           "e",
                           TrunkLayout(0),
                           create_shared_repo=True,
                           filter_branch=lambda branch: branch.get_branch_path(
                           ).endswith("somebranch"))
        self.assertTrue(os.path.exists("e/branches/somebranch"))
        self.assertFalse(os.path.exists("e/branches/anotherbranch"))
Exemplo n.º 19
0
    def test_fetch_dead(self):
        dc = self.get_commit_editor()
        bs = dc.open_dir("branches")
        sb = bs.add_dir("branches/somebranch")
        sb.add_file("branches/somebranch/somefile").modify('data')
        dc.close()

        dc = self.get_commit_editor()
        bs = dc.open_dir("branches")
        bs.delete("branches/somebranch")
        dc.close()

        oldrepos = Repository.open(self.repos_url)
        convert_repository(oldrepos,
                           "e",
                           TrunkLayout(0),
                           all=True,
                           create_shared_repo=True)
        newrepos = Repository.open("e")
        self.assertTrue(
            newrepos.has_revision(
                oldrepos.generate_revision_id(3, u"branches/somebranch",
                                              oldrepos.get_mapping())))
Exemplo n.º 20
0
    def run(self,
            from_location,
            to_location=None,
            format=None,
            trees=False,
            standalone=False,
            layout=None,
            all=False,
            prefix=None,
            keep=False,
            restore=False,
            until=None,
            colocated=False):
        from breezy import (
            osutils,
            trace,
            urlutils,
        )
        from breezy.controldir import ControlDir
        from breezy.errors import (
            BzrCommandError,
            NoRepositoryPresent,
        )
        from breezy.plugins.svn import gettext
        from breezy.plugins.svn.convert import convert_repository
        from breezy.plugins.svn.remote import SvnRemoteAccess
        from breezy.plugins.svn.repository import SvnRepository
        from breezy.plugins.svn.workingtree import SvnCheckout
        import os
        from subvertpy import NODE_NONE

        if to_location is None:
            to_location = os.path.basename(from_location.rstrip("/\\"))

        if all:
            # All implies shared repository
            # (otherwise there is no repository to store revisions in)
            standalone = False

        if os.path.isfile(from_location):
            from breezy.plugins.svn.convert import load_dumpfile
            import tempfile
            tmp_repos = tempfile.mkdtemp(prefix='bzr-svn-dump-')
            load_dumpfile(from_location, tmp_repos)
            from_location = tmp_repos
        else:
            tmp_repos = None

        from_dir = ControlDir.open(from_location)

        if not (isinstance(from_dir, SvnRemoteAccess)
                or isinstance(from_dir, SvnCheckout)):
            raise BzrCommandError(
                gettext("Source repository is not a Subversion repository."))

        try:
            from_repos = from_dir.open_repository()
        except NoRepositoryPresent as e:
            if prefix is not None:
                raise BzrCommandError(
                    gettext("Path inside repository specified "
                            "and --prefix specified"))
            from_repos = from_dir.find_repository(_ignore_branch_path=True)
            assert from_dir.root_transport.base.startswith(from_repos.base)
            prefix = from_dir.root_transport.base[len(from_repos.base):].strip(
                "/")
            prefix = prefix.encode("utf-8")

        if not isinstance(from_repos, SvnRepository):
            raise BzrCommandError(
                gettext("Not a Subversion repository: %s") % from_location)

        if until is None:
            to_revnum = from_repos.get_latest_revnum()
        else:
            to_revnum = min(until, from_repos.get_latest_revnum())

        from_repos.lock_read()
        try:
            if prefix is not None:
                if layout is None:
                    overall_layout = from_repos.get_guessed_layout()
                else:
                    overall_layout = layout
                prefix = prefix.strip("/") + "/"
                if overall_layout.is_branch(prefix):
                    raise BzrCommandError(
                        gettext("%s appears to contain a branch. "
                                "For individual branches, use 'bzr branch'.") %
                        from_location)
                # FIXME: Hint about is_tag()
                elif overall_layout.is_branch_parent(prefix):
                    self.outf.write(
                        gettext(gettext("Importing branches with prefix %s\n"))
                        % ("/" + urlutils.unescape_for_display(
                            prefix, self.outf.encoding)))
                else:
                    raise BzrCommandError(
                        gettext(
                            "The specified path is inside a branch. "
                            "Specify a different URL or a different repository layout (see also 'bzr help svn-layout')."
                        ))

            if (prefix is not None and from_repos.transport.check_path(
                    prefix, to_revnum) == NODE_NONE):
                raise BzrCommandError("Prefix %s does not exist" % prefix)

            def filter_branch(branch):
                if (prefix is not None
                        and not branch.get_branch_path().startswith(prefix)):
                    return False
                return True

            trace.note(gettext("Using repository layout: %s"), layout
                       or from_repos.get_layout())
            convert_repository(from_repos,
                               to_location,
                               layout,
                               not standalone,
                               trees,
                               all,
                               format=format,
                               filter_branch=filter_branch,
                               keep=keep,
                               incremental=not restore,
                               to_revnum=to_revnum,
                               prefix=prefix,
                               colocated=colocated,
                               remember_parent=(tmp_repos is None))

            if tmp_repos is not None:
                osutils.rmtree(tmp_repos)
            if not trees:
                trace.note(
                    gettext("Use 'bzr checkout' to create a working tree in "
                            "the newly created branches."))
        finally:
            from_repos.unlock()
Exemplo n.º 21
0
    def test_open_internal(self):
        filename = os.path.join(self.test_dir, "dumpfile")
        open(filename, 'w').write("""SVN-fs-dump-format-version: 2

UUID: 6987ef2d-cd6b-461f-9991-6f1abef3bd59

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2006-07-02T13:14:51.972532Z
PROPS-END

Revision-number: 1
Prop-content-length: 109
Content-length: 109

K 7
svn:log
V 9
Add trunk
K 10
svn:author
V 6
jelmer
K 8
svn:date
V 27
2006-07-02T13:58:02.528258Z
PROPS-END

Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: trunk/bla
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 5
Text-content-md5: 6137cde4893c59f76f005a8123d8e8e6
Content-length: 15

PROPS-END
data


""")
        repos = self.load_dumpfile(filename, 'g')
        convert_repository(repos, os.path.join(self.test_dir, "e"),
                           TrunkLayout(0))
        mapping = repos.get_mapping()
        abspath = self.test_dir
        if sys.platform == 'win32':
            abspath = '/' + abspath
        branch = Branch.open(os.path.join(self.test_dir, "e", "trunk"))
        self.assertEqual(
            local_path_to_url(os.path.join(self.test_dir, "e", "trunk")),
            branch.base.rstrip("/"))
        self.assertEqual(
            mapping.revision_id_foreign_to_bzr(
                ("6987ef2d-cd6b-461f-9991-6f1abef3bd59", 'trunk', 1)),
            branch.last_revision())