Rev 993: Merge 0.4 in file:///data/jelmer/bzr-svn/layout/
Jelmer Vernooij
jelmer at samba.org
Fri May 2 21:25:21 BST 2008
At file:///data/jelmer/bzr-svn/layout/
------------------------------------------------------------
revno: 993
revision-id: jelmer at samba.org-20080502202505-dt4qe0v8dsdivtpk
parent: jelmer at samba.org-20080502202401-bo2z83mdmz0yqmks
parent: jelmer at samba.org-20080502160233-7jbc8juolrno1mnk
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: layout
timestamp: Fri 2008-05-02 22:25:05 +0200
message:
Merge 0.4
modified:
branchprops.py branchprops.py-20061223204623-80lvm7pjrpsgk0dd-1
logwalker.py logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
repository.py repository.py-20060306123302-1f8c5069b3fe0265
tests/test_transport.py test_transport.py-20060621232111-xh7xvoblzsrgj79t-1
transport.py transport.py-20060406231150-b3472d06b3a0818d
------------------------------------------------------------
revno: 974.1.140
revision-id: jelmer at samba.org-20080502160233-7jbc8juolrno1mnk
parent: jelmer at samba.org-20080502152551-zu1qfk162u4pw4lx
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Fri 2008-05-02 18:02:33 +0200
message:
Fix a couple of regressions.
modified:
logwalker.py logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
------------------------------------------------------------
revno: 974.1.139
revision-id: jelmer at samba.org-20080502152551-zu1qfk162u4pw4lx
parent: jelmer at samba.org-20080502140325-bo0oaia7o3v2s8iq
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Fri 2008-05-02 17:25:51 +0200
message:
Share connection pools between transport instances.
modified:
branchprops.py branchprops.py-20061223204623-80lvm7pjrpsgk0dd-1
logwalker.py logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
repository.py repository.py-20060306123302-1f8c5069b3fe0265
tests/test_transport.py test_transport.py-20060621232111-xh7xvoblzsrgj79t-1
transport.py transport.py-20060406231150-b3472d06b3a0818d
=== modified file 'branchprops.py'
--- a/branchprops.py 2008-05-02 12:30:29 +0000
+++ b/branchprops.py 2008-05-02 15:25:51 +0000
@@ -38,7 +38,7 @@
path = path.lstrip("/")
try:
- (_, _, props) = self.log._get_transport().get_dir(path,
+ (_, _, props) = self.log._transport.get_dir(path,
revnum)
except SubversionException, (_, num):
if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
=== modified file 'logwalker.py'
--- a/logwalker.py 2008-05-02 14:03:25 +0000
+++ b/logwalker.py 2008-05-02 16:02:33 +0000
@@ -99,7 +99,7 @@
CacheTable.__init__(self, cache_db)
self.actual = actual
- self._get_transport = actual._get_transport
+ self._transport = actual._transport
self.find_children = actual.find_children
self.saved_revnum = self.cachedb.execute("SELECT MAX(rev) FROM changed_path").fetchone()[0]
@@ -175,7 +175,7 @@
next = changes.find_prev_location(revpaths, path, revnum)
- revprops = lazy_dict({}, self._get_transport().revprop_list, revnum)
+ revprops = lazy_dict({}, self._transport.revprop_list, revnum)
if changes.changes_path(revpaths, path, True):
yield (path, revpaths, revnum, revprops)
@@ -242,7 +242,7 @@
"""
if to_revnum <= self.saved_revnum:
return
- latest_revnum = self.actual._get_transport().get_latest_revnum()
+ latest_revnum = self.actual._transport.get_latest_revnum()
to_revnum = max(latest_revnum, to_revnum)
pb = ui.ui_factory.nested_progress_bar()
@@ -250,7 +250,7 @@
try:
try:
while self.saved_revnum < to_revnum:
- for (orig_paths, revision, revprops) in self.actual._get_transport().iter_log("", self.saved_revnum,
+ for (orig_paths, revision, revprops) in self.actual._transport.iter_log("", self.saved_revnum,
to_revnum, self.actual._limit, True,
True, []):
pb.update('fetching svn revision info', revision, to_revnum)
@@ -301,20 +301,13 @@
"""
assert isinstance(transport, SvnRaTransport)
- self.url = transport.base
- self._transport = None
+ self._transport = transport
if limit is not None:
self._limit = limit
else:
self._limit = LOG_CHUNK_LIMIT
- def _get_transport(self):
- if self._transport is not None:
- return self._transport
- self._transport = SvnRaTransport(self.url)
- return self._transport
-
def find_latest_change(self, path, revnum, include_children=True):
"""Find latest revision that touched path.
@@ -325,7 +318,7 @@
assert isinstance(revnum, int) and revnum >= 0
try:
- return self._get_transport().iter_log(path, revnum, 0, 2, True, False, []).next()[1]
+ return self._transport.iter_log(path, revnum, 0, 2, True, False, []).next()[1]
except SubversionException, (_, num):
if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
raise NoSuchRevision(branch=self,
@@ -347,7 +340,7 @@
assert from_revnum >= 0 and to_revnum >= 0 and from_revnum >= to_revnum
try:
- for (changed_paths, revnum, known_revprops) in self._get_transport().iter_log(path, from_revnum, to_revnum, limit, True, False, []):
+ for (changed_paths, revnum, known_revprops) in self._transport.iter_log(path, from_revnum, to_revnum, limit, True, False, []):
if pb is not None:
pb.update("determining changes", from_revnum-revnum, from_revnum)
if revnum == 0 and changed_paths is None:
@@ -356,7 +349,7 @@
assert isinstance(changed_paths, dict), "invalid paths in %r:%r" % (revnum, path)
revpaths = struct_revpaths_to_tuples(changed_paths)
next = changes.find_prev_location(revpaths, path, revnum)
- revprops = lazy_dict(known_revprops, self._get_transport().revprop_list, revnum)
+ revprops = lazy_dict(known_revprops, self._transport.revprop_list, revnum)
yield (path, revpaths, revnum, revprops)
if next is None:
break
@@ -364,7 +357,7 @@
except SubversionException, (_, num):
if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
raise NoSuchRevision(branch=self,
- revision="Revision number %d" % revnum)
+ revision="Revision number %d" % from_revnum)
raise
def get_revision_paths(self, revnum):
@@ -380,7 +373,7 @@
try:
return struct_revpaths_to_tuples(
- self._get_transport().iter_log("", revnum, revnum, 1, True, True, []).next()[0])
+ self._transport.iter_log("", revnum, revnum, 1, True, True, []).next()[0])
except SubversionException, (_, num):
if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
raise NoSuchRevision(branch=self,
@@ -394,8 +387,7 @@
:param revnum: Revision to check
"""
path = path.strip("/")
- transport = self._get_transport()
- ft = transport.check_path(path, revnum)
+ ft = self._transport.check_path(path, revnum)
if ft == svn.core.svn_node_file:
return []
assert ft == svn.core.svn_node_dir
@@ -444,15 +436,13 @@
pass
pool = Pool()
editor = TreeLister(path)
- old_base = transport.base
+ conn = self._transport.connections.get(urlutils.join(self._transport.get_svn_repos_root(), path))
try:
- root_repos = transport.get_svn_repos_root()
- transport.reparent(urlutils.join(root_repos, path))
- reporter = transport.do_update(revnum, True, editor, pool)
+ reporter = conn.do_update(revnum, True, editor, pool)
reporter.set_path("", revnum, True, None, pool)
reporter.finish_report(pool)
finally:
- transport.reparent(old_base)
+ self._transport.connections.add(conn)
return editor.files
def get_previous(self, path, revnum):
@@ -466,7 +456,7 @@
return (None, -1)
try:
- paths = struct_revpaths_to_tuples(self._get_transport().iter_log(path, revnum, revnum, 1, True, False, []).next()[0])
+ paths = struct_revpaths_to_tuples(self._transport.iter_log(path, revnum, revnum, 1, True, False, []).next()[0])
except SubversionException, (_, num):
if num == svn.core.SVN_ERR_FS_NO_SUCH_REVISION:
raise NoSuchRevision(branch=self,
=== modified file 'repository.py'
--- a/repository.py 2008-05-02 20:24:01 +0000
+++ b/repository.py 2008-05-02 20:25:05 +0000
@@ -485,7 +485,7 @@
assert isinstance(mapping, BzrSvnMapping)
if revprops is None:
- revprops = logwalker.lazy_dict({}, self._log._get_transport().revprop_list, revnum)
+ revprops = logwalker.lazy_dict({}, self.transport.revprop_list, revnum)
if changed_fileprops is None:
changed_fileprops = logwalker.lazy_dict({}, self.branchprop_list.get_changed_properties, path, revnum)
=== modified file 'tests/test_transport.py'
--- a/tests/test_transport.py 2008-04-12 16:08:21 +0000
+++ b/tests/test_transport.py 2008-05-02 15:25:51 +0000
@@ -41,13 +41,6 @@
self.assertIsInstance(t, SvnRaTransport)
self.assertEqual(t.base, repos_url)
- def test_reparent(self):
- repos_url = self.make_client('d', 'dc')
- t = SvnRaTransport(repos_url)
- t.mkdir("foo")
- t.reparent("%s/foo" % repos_url)
- self.assertEqual("%s/foo" % repos_url, t.base)
-
def test_lock_read(self):
repos_url = self.make_client('d', 'dc')
t = SvnRaTransport(repos_url)
@@ -116,8 +109,6 @@
t = SvnRaTransport(repos_url)
tt = t.clone()
self.assertEqual(tt.base, t.base)
- tt.reparent(urlutils.join(t.base, "dir"))
- self.assertNotEqual(tt.base, t.base)
def test_mkdir(self):
repos_url = self.make_client('d', 'dc')
=== modified file 'transport.py'
--- a/transport.py 2008-05-02 13:05:29 +0000
+++ b/transport.py 2008-05-02 15:25:51 +0000
@@ -461,7 +461,19 @@
if c.url == url:
self.connections.remove(c)
return c
- return Connection(url)
+ # Nothing available? Just pick an existing one and reparent:
+ if len(self.connections) == 0:
+ return Connection(url)
+ c = self.connections.pop()
+ try:
+ c.reparent(url)
+ return c
+ except NotImplementedError:
+ self.connections.add(c)
+ return Connection(url)
+ except:
+ self.connections.add(c)
+ raise
def add(self, connection):
self.connections.add(connection)
@@ -473,7 +485,7 @@
This implements just as much of Transport as is necessary
to fool Bazaar. """
@convert_svn_error
- def __init__(self, url="", _backing_url=None):
+ def __init__(self, url="", _backing_url=None, pool=None):
self.pool = Pool()
bzr_url = url
self.svn_url = bzr_to_svn_url(url)
@@ -484,11 +496,13 @@
self._backing_url = _backing_url.rstrip("/")
Transport.__init__(self, bzr_url)
- self.connections = ConnectionPool()
-
- connection = Connection(self._backing_url)
-
- self.connections.add(connection)
+ if pool is None:
+ self.connections = ConnectionPool()
+ else:
+ self.connections = pool
+
+ # Make sure that the URL is valid by connecting to it.
+ self.connections.add(self.connections.get(self._backing_url))
from bzrlib.plugins.svn import lazy_check_versions
lazy_check_versions()
@@ -604,13 +618,6 @@
return self.connections.get(self.svn_url)
return self.get_connection()
- def reparent_root(self):
- if self._is_http_transport():
- self.svn_url = self.get_svn_repos_root()
- self.base = self.get_repos_root()
- else:
- self.reparent(self.get_repos_root())
-
def change_rev_prop(self, revnum, name, value, pool=None):
conn = self.get_connection()
try:
@@ -618,23 +625,6 @@
finally:
self.add_connection(conn)
- @convert_svn_error
- def reparent(self, url):
- url = url.rstrip("/")
- self.base = url
- self.svn_url = bzr_to_svn_url(url)
- if self.svn_url == self._backing_url:
- return
- conn = self.get_connection()
- try:
- conn.reparent(url)
- except NotImplementedError:
- self.add_connection(conn)
- self.mutter('svn reparent (reconnect) %r' % url)
- conn = self.connections.get(self.svn_url.encode('utf8'))
- self.add_connection(conn)
- self._backing_url = self.svn_url
-
def get_dir(self, path, revnum, pool=None, kind=False):
path = self._request_path(path)
conn = self.get_connection()
@@ -742,15 +732,17 @@
def clone_root(self):
if self._is_http_transport():
return SvnRaTransport(self.get_repos_root(),
- bzr_to_svn_url(self.base))
- return SvnRaTransport(self.get_repos_root())
+ bzr_to_svn_url(self.base),
+ pool=self.connections)
+ return SvnRaTransport(self.get_repos_root(),
+ pool=self.connections)
def clone(self, offset=None):
"""See Transport.clone()."""
if offset is None:
- return SvnRaTransport(self.base)
+ return SvnRaTransport(self.base, pool=self.connections)
- return SvnRaTransport(urlutils.join(self.base, offset))
+ return SvnRaTransport(urlutils.join(self.base, offset), pool=self.connections)
def local_abspath(self, relpath):
"""See Transport.local_abspath()."""
More information about the bazaar-commits
mailing list