Support svn+ hack when committing in bound branches. (#150699)
authorJelmer Vernooij <jelmer@samba.org>
Tue, 9 Oct 2007 12:27:42 +0000 (14:27 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Tue, 9 Oct 2007 12:27:42 +0000 (14:27 +0200)
NEWS
fetch.py
logwalker.py
remote.py
tests/test_transport.py
transport.py
tree.py

diff --git a/NEWS b/NEWS
index 2cccd7ee4f37655d94b8b2f47bc13decddab566d..5b8aeae9ca5650f84c738cac49848d277a17cf72 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -28,6 +28,8 @@ bzr-svn 0.4.4 UNRELEASED
    * Give proper warning message when running 'bzr svn-import' on 
      something that is not a Subversion repository. 
 
+   * Support svn+ hack when committing in bound branches. (#150699)
+
   DOCUMENTATION
 
    * Add simple FAQ file. (#144388)
index 5c4c8c8ad562f04fa81f608a0a4a29e43cd8b64f..a9650cf31d6a6dbe7c61dff6e74ab3cab0fd15e9 100644 (file)
--- a/fetch.py
+++ b/fetch.py
@@ -428,7 +428,7 @@ class InterFromSvnRepository(InterRepository):
             # Nothing to fetch
             return
 
-        repos_root = self.source.transport.get_repos_root()
+        repos_root = self.source.transport.get_svn_repos_root()
 
         prev_revid = None
         transport = self.source.transport
index 80cb025bf6bb934284bd260cffdad92b0351df6d..68ba7b8a82b4e8ee8a689ccb4f86d1f260b178ec 100644 (file)
@@ -335,7 +335,7 @@ class LogWalker(object):
         edit, baton = svn.delta.make_editor(editor, pool)
         old_base = transport.base
         try:
-            root_repos = transport.get_repos_root()
+            root_repos = transport.get_svn_repos_root()
             transport.reparent(urlutils.join(root_repos, path))
             reporter = transport.do_update(revnum,  True, edit, baton, pool)
             reporter.set_path("", revnum, True, None, pool)
index bac96cd42544dab950a39bd66cd3e05497edfba1..6790ff7f38d6b9c484665f105dbf7649e369f537 100644 (file)
--- a/remote.py
+++ b/remote.py
@@ -46,7 +46,8 @@ class SvnRemoteAccess(BzrDir):
         self.root_transport = _transport
 
         svn_url = bzr_to_svn_url(self.root_transport.base)
-        self.svn_root_url = _transport.get_repos_root()
+        self.svn_root_url = _transport.get_svn_repos_root()
+        self.root_url = _transport.get_repos_root()
 
         assert svn_url.startswith(self.svn_root_url)
         self.branch_path = svn_url[len(self.svn_root_url):]
@@ -95,7 +96,7 @@ class SvnRemoteAccess(BzrDir):
         :return: instance of SvnRepository.
         """
         transport = self.root_transport
-        if self.svn_root_url != transport.base:
+        if self.root_url != transport.base:
             transport = transport.clone_root()
         return SvnRepository(self, transport, self.branch_path)
 
index 808cf4691aadfbf27dea6ade0f3044470fdcf812..10d0eb7eea86c50c6839f25ac7a24036559830f0 100644 (file)
@@ -167,7 +167,7 @@ class SvnRaTest(TestCaseWithSubversionRepository):
         self.client_commit("dc", "Bla")
 
         t = SvnRaTransport("%s/dir" % repos_url)
-        root = t.get_repos_root()
+        root = t.get_svn_repos_root()
         self.assertEqual(repos_url, root)
 
     def test_local_abspath(self):
index d044a17ddbb22e9c145281f299f2efc4a91a7121..c1d0e51af72b657ace46f371a094e7a4579188c9 100644 (file)
@@ -282,9 +282,16 @@ class SvnRaTransport(Transport):
         self.mutter('svn get-uuid')
         return svn.ra.get_uuid(self._ra)
 
+    def get_repos_root(self):
+        root = self.get_svn_repos_root()
+        if (self.base.startswith("svn+http:") or 
+            self.base.startswith("svn+https:")):
+            return "svn+%s" % root
+        return root
+
     @convert_svn_error
     @needs_busy
-    def get_repos_root(self):
+    def get_svn_repos_root(self):
         if self._root is None:
             self.mutter("svn get-repos-root")
             self._root = svn.ra.get_repos_root(self._ra)
@@ -313,12 +320,13 @@ class SvnRaTransport(Transport):
 
     def _open_real_transport(self):
         if self._backing_url != self.svn_url:
-            self.reparent(self.svn_url)
+            self.reparent(self.base)
         assert self._backing_url == self.svn_url
 
     def reparent_root(self):
         if self._is_http_transport():
-            self.svn_url = self.base = self.get_repos_root()
+            self.svn_url = self.get_svn_repos_root()
+            self.base = self.get_repos_root()
         else:
             self.reparent(self.get_repos_root())
 
@@ -327,17 +335,17 @@ class SvnRaTransport(Transport):
     def reparent(self, url):
         url = url.rstrip("/")
         self.base = url
-        self.svn_url = url
-        if url == self._backing_url:
+        self.svn_url = bzr_to_svn_url(url)
+        if self.svn_url == self._backing_url:
             return
         if hasattr(svn.ra, 'reparent'):
             self.mutter('svn reparent %r' % url)
-            svn.ra.reparent(self._ra, url, self.pool)
+            svn.ra.reparent(self._ra, self.svn_url, self.pool)
         else:
             self.mutter('svn reparent (reconnect) %r' % url)
             self._ra = svn.client.open_ra_session(self.svn_url.encode('utf8'), 
                     self._client, self.pool)
-        self._backing_url = url
+        self._backing_url = self.svn_url
 
     @convert_svn_error
     @needs_busy
diff --git a/tree.py b/tree.py
index 34e0977a54347281dd632112224c6486fee913ef..b8517741bf53a226b8db75f161cbfbbf067a0405 100644 (file)
--- a/tree.py
+++ b/tree.py
@@ -68,7 +68,7 @@ class SvnRevisionTree(RevisionTree):
         self.editor = TreeBuildEditor(self, pool)
         self.file_data = {}
         editor, baton = svn.delta.make_editor(self.editor, pool)
-        root_repos = repository.transport.get_repos_root()
+        root_repos = repository.transport.get_svn_repos_root()
         reporter = repository.transport.do_switch(
                 self.revnum, True, 
                 urlutils.join(root_repos, self.branch_path), editor, baton, pool)