[MERGE][0.90][Bug 133965] PathNotChild, port mismatch with "bzr info" for bzr:// smartserver
Andrew Bennetts
andrew at puzzling.org
Sun Aug 26 10:12:22 BST 2007
Andrew Bennetts wrote:
> [...] So here's an updated
> version.
In my haste to correct my mistake, I forgot to actually attach the new bundle!
Here it is.
-Andrew.
-------------- next part --------------
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: andrew.bennetts at canonical.com-20070826085926-\
# aqwpi7sprt2enh0i
# target_branch: http://bazaar-vcs.org/bzr/bzr.0.90
# testament_sha1: 4b6ac2563597426623b77299dd5aa1c38cc99934
# timestamp: 2007-08-26 18:59:30 +1000
# source_branch: http://people.ubuntu.com/~andrew/bzr/port-mismatch-\
# bug-133965
# base_revision_id: pqm at pqm.ubuntu.com-20070822004557-ipcsdwnro02sbrpd
#
# Begin patch
=== modified file 'NEWS'
--- NEWS 2007-08-21 20:54:11 +0000
+++ NEWS 2007-08-26 07:40:34 +0000
@@ -18,6 +18,12 @@
from the developer document catalog back to the main one.
(Ian Clatworthy, Sabin Iacob, Alexander Belchenko)
+ BUGFIXES:
+
+ * Fix ''bzr info bzr://host/'' and other operations on ''bzr://' URLs with
+ an implicit port. We were incorrectly raising PathNotChild due to
+ inconsistent treatment of the ''_port'' attribute on the Transport object.
+ (Andrew Bennetts, #133965)
bzr 0.90rc1 2007-08-14
======================
=== modified file 'bzrlib/tests/test_transport.py'
--- bzrlib/tests/test_transport.py 2007-07-22 15:44:59 +0000
+++ bzrlib/tests/test_transport.py 2007-08-26 07:40:34 +0000
@@ -54,6 +54,10 @@
from bzrlib.transport.memory import MemoryTransport
from bzrlib.transport.local import (LocalTransport,
EmulatedWin32LocalTransport)
+from bzrlib.transport.remote import (
+ BZR_DEFAULT_PORT,
+ RemoteTCPTransport
+ )
# TODO: Should possibly split transport-specific tests into their own files.
@@ -714,6 +718,50 @@
self.assertIsNot(t1, t2)
+class TestRemoteTCPTransport(TestCase):
+ """Tests for bzr:// transport (RemoteTCPTransport)."""
+
+ def test_relpath_with_implicit_port(self):
+ """Connected transports with the same URL are the same, even if the
+ port is implicit.
+
+ So t.relpath(url) should always be '' if t.base is the same as url, or
+ if the only difference is that one explicitly specifies the default
+ port and the other doesn't specify a port.
+ """
+ t_implicit_port = RemoteTCPTransport('bzr://host.com/')
+ self.assertEquals('', t_implicit_port.relpath('bzr://host.com/'))
+ self.assertEquals('', t_implicit_port.relpath('bzr://host.com:4155/'))
+ t_explicit_port = RemoteTCPTransport('bzr://host.com:4155/')
+ self.assertEquals('', t_explicit_port.relpath('bzr://host.com/'))
+ self.assertEquals('', t_explicit_port.relpath('bzr://host.com:4155/'))
+
+ def test_construct_uses_default_port(self):
+ """If no port is specified, then RemoteTCPTransport uses
+ BZR_DEFAULT_PORT.
+ """
+ t = get_transport('bzr://host.com/')
+ self.assertEquals(BZR_DEFAULT_PORT, t._port)
+
+ def test_url_omits_default_port(self):
+ """If a RemoteTCPTransport uses the default port, then its base URL
+ will omit the port.
+
+ This is like how ":80" is omitted from "http://example.com/".
+ """
+ t = get_transport('bzr://host.com:4155/')
+ self.assertEquals('bzr://host.com/', t.base)
+
+ def test_url_includes_non_default_port(self):
+ """Non-default ports are included in the transport's URL.
+
+ Contrast this to `test_url_omits_default_port`.
+ """
+ t = get_transport('bzr://host.com:666/')
+ self.assertEquals('bzr://host.com:666/', t.base)
+
+
+
def get_test_permutations():
"""Return transport permutations to be used in testing.
=== modified file 'bzrlib/transport/__init__.py'
--- bzrlib/transport/__init__.py 2007-08-09 03:23:04 +0000
+++ bzrlib/transport/__init__.py 2007-08-26 08:59:26 +0000
@@ -83,6 +83,7 @@
def _clear_protocol_handlers():
global transport_list_registry
transport_list_registry = TransportListRegistry()
+ _default_ports.clear()
def _get_transport_modules():
@@ -101,6 +102,17 @@
return result
+_default_ports = {}
+
+def _get_default_port(scheme):
+ """Return the registered default port for this protocol scheme."""
+ try:
+ port = _default_ports.get(scheme + '://')
+ except KeyError:
+ port = None
+ return port
+
+
class TransportListRegistry(registry.Registry):
"""A registry which simplifies tracking available Transports.
@@ -134,8 +146,10 @@
transport_list_registry = TransportListRegistry( )
-def register_transport_proto(prefix, help=None, info=None):
+def register_transport_proto(prefix, help=None, info=None, default_port=None):
transport_list_registry.register_transport(prefix, help, info)
+ if default_port is not None:
+ _default_ports[prefix] = default_port
def register_lazy_transport(prefix, module, classname):
@@ -1222,6 +1236,10 @@
host = urllib.unquote(host)
path = urllib.unquote(path)
+ if port is None:
+ # The port isn't explicitly specified, so return the default (if
+ # there is one).
+ port = _get_default_port(scheme)
return (scheme, user, password, host, port, path)
@staticmethod
@@ -1252,7 +1270,9 @@
# have one so that it doesn't get accidentally
# exposed.
netloc = '%s@%s' % (urllib.quote(user), netloc)
- if port is not None:
+ if port is not None and port != _get_default_port(scheme):
+ # Include the port in the netloc (unless it's the same as the
+ # default, in which case we omit it as it is redundant).
netloc = '%s:%d' % (netloc, port)
path = urllib.quote(path)
return urlparse.urlunparse((scheme, netloc, path, None, None, None))
@@ -1658,7 +1678,8 @@
'bzrlib.transport.fakevfat',
'FakeVFATTransportDecorator')
register_transport_proto('bzr://',
- help="Fast access using the Bazaar smart server.")
+ help="Fast access using the Bazaar smart server.",
+ default_port=4155)
register_lazy_transport('bzr://',
'bzrlib.transport.remote',
=== modified file 'bzrlib/transport/remote.py'
--- bzrlib/transport/remote.py 2007-07-30 14:36:04 +0000
+++ bzrlib/transport/remote.py 2007-08-26 08:59:26 +0000
@@ -443,8 +443,6 @@
def _build_medium(self):
assert self.base.startswith('bzr://')
- if self._port is None:
- self._port = BZR_DEFAULT_PORT
return medium.SmartTCPClientMedium(self._host, self._port), None
# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWUj1l/8ACQnfgHRQef///3//
//r////6YBCfe7e97N7gPKVVRS0BoiUVuFbs1FBpQFDRqlIKSAbEJKQBDU0ek9J+ppop5Gk/SmT1
NpMRp4iaaeQ0gGh6mEBKmo0U2j0TaJlDTQANPU0NMgAA0AADIANTTE0mSgAYgAAAGQDQAAAAAEiI
TITRDTUyCaj0yYApmoek2mnqENA0GgMgHGhoGjTI00aZAYmCAAGgNAaZAYEyBJEQNCYgAE0am0Ca
ATaKeRkjCep6TTTRkNNE4lOwLAE7iSGF+l33+3n2RuY0LWc+xzg7Uc0eko20NXo6M2krZEN/dgN+
f7vtIdP/Ttc1NdT4Q77PBfuB4KT0U8nhI4EIX4FOaLI77XhGRKVCpE3nhc8jalWiHXeer6NgqQGF
EY8xxfhw8nNXVq0NTUiNYKrB0K53ADEHOWSQnSG44XCEoVLWQmsJERlOCq6YYRSTOivvuu6MACQo
kCCZUHh+rV4oPHVxRbIwr90O4A4LkJptJNsYDabvxBdOxixg4xZhyZ1V7UiI91UjOqYVcb0QLKLj
faC5akAJKb6YhpPYMysgM3q5ZKYYnpTRMKGBARSgxF7QSoQok2eLYO8CdUwNttCfp9lkc43uciHF
UdNAT0d0JHUOwUblWvXT3llejXqfYFtH23HKUAvAwguLeH1lXSp2Edh0Ls7ScYfMDhM9WtNmii/K
s4bF+OOhh9/oMzGqwsHLgZzbN2k3RmVLNRWE5cEGTosxqu1FYcnXBExacYjOcIoFs7WLqM10xkUj
uQaYHWIytrfQVGDoGVeOMM9m1jSrq5wzRhAXNAV63ydm7bS252ndpXlQpNtTp1L43BfHZGK2nFmS
Zz9g6kwce0aC9XV3PL6INvqIK8IKm7kj+eLA7B622d1nqIiaeneL1HYB9BIp7fSCOnGfOfCVLtjG
mgLMS+kI+IZjxJ96feDUgog7KCRE3KO4IHQO44z8/xeZR6hzlAIMEKIb+ppmymi3sLihmZNsqgFV
TQJEA3hKzzT+jThSYuk1nLiSFirvsKaUyOn6QQdgvmF7Q9R4zHkEwYYt8BhAdgeB2gj2NJIYNg4X
bRjtCMiscol6Jj1cH1bf1hHa+rPF7e3HaYlSbDocZJlwACFi/YGJLSqQyn/Nu5Wv3twLkDF+HeDz
ty/LL54hjh/aAdYH1k1fNa6HdypC/mIm9DDT+LVx2bL/C4EQaFDBSwr4nYlrKpZIS2PMZ+DoqGQ0
d89YQtNI2ML0Cla1WIPieBRBCm987k5EK6UUWkphIJF5ioIyCsyDSAYiDjUMHOZlQKA/5e4oL2LB
ifTmzcwjHSfMbzlOtImxOEwyuGIzjCvhOev2jr0nGcSEFh8zSwERwGVd+cgDNh3Q330jtuHFArjU
js4EZ7NwyGXAZG7dEkwq6HUoddI0Yh84VrweN6NC6WHAYLmQM7fMVEF76SooDIeO3TWYTmAbzIU1
ocD8qMCgsnMhUZyYOY7QqnPsDEXa4mnHoitNrGYckkKgbYCkXucg326TK5coHwbpL7lAZSQNliwb
lQRIkolY+S2MCJTAJEwTEEJ9tcODlgVGbGHUIovlSvKEtWJxrIkfldEkXTEWOm5hTITk9cqBEVhj
q43l8iJAGQLMT75UWmEy2aK62xFNUUVjm0yFm+jGZguNZf+su2GIny/vys1EztlhSzwtBFLA2geR
jBGwHlVEgIlKXwyA5NGl9RkLCcI6S6iNBiIJWMYiknGgaSkIR0macxTlBYUFBINN/y4WhNacQsIQ
AkYF5EtKCkgWWRBHo3Yc1KZrJabIxsZ2Jowua0pGdmDHU5VQwOFA5ndI9AaLcJUysHCQxhoRL24F
s+aRmjFmpDCrSUF86KDUVi4XFZSXmpxqEbGptyNKlogJEMYWkyk3E7HA0MiSoZFxYH23O1Q9lG4t
mmxTS2BEQ6IhVUrkTAhgYR40loGRCoxoqMZGRApyStKjLqNeYa4kESUqy+JrKyicLCkhiNCDzzGm
bGWmcwMiwUC8ncZTG6i0N6JEgyGGXRTnoau5i06jBHAyk1MGxTXeDJLhORzF9YIDUrmtAW8oWDYL
58ApcZmYMiTyiNQ357JrfujYqx67754Tr0cLTWFpTSRmQQGEljmIjzlpYVmQsIlQi4GIOQLi1xla
MYCaP3GBWE7lZkITwCYwCckYI2xcqzUKRY2xYy4FAyDhuLyIYuJrgNC5hA1xCJiJrKywvVhQSKhs
RcUHeCN3gCl26/bC09BzEdZQfV6XBYw9YMVOc7ogfDeHDRmmgA4JwgBsQpm6g3H1BzjAHzGDwo50
vxZmRcZDU7Q1oEHEpHJj6wYxkFiIGm0raP8+U8j5gNp3ECocKxhyBCAAaimGsHgfmWcDp7u8PxQM
L2AkIxFKSJFDiAgnkGsYpHS7epYWQJLF7A7HBFESlgvGfdrjiciyc2FpmGDaxZQcgNM2ofUyWDTM
gaSNyWMT/TpNw6MY2sGoWAhFVK+EndnPoPCsBrd+yQ+UD2uO2poKy0z0zIOEfIDjshtyg0YSxMjd
Mlx6oGBMM1tBXiFiukAsKDvAcy4R/Fu8JKLAxHF4IPELbAtUOYfeqOxZHgNV0zLubK6oNkCvJQEy
grNhahWZdYxLK2kc2aKyDtuGuFRG3jMY1PZ5GWZ9/JJHh6uuUPu+Hh3HOGZByN4wTnwbR16OE6zw
TUCg6YGG1sfK0ohZyUXvf2NKGCuPFsSvnGgoMPpghBTKHVv4PgOOQCC8OHLPoOo7BhkN4zjMoRnH
hfCCkJzlisejrCWC5KVNi2E6F2sfBCkZwJSEAXQKDpYYfxulWVI/wfWn7EnD8EMoQBy4AJxJbsBH
frNDHj3VShCIOWy8qSRh0s5y6byTCoaZarQYJ99LMx+gYyYrjoSRL7T1l5u7TyGorOpdRQV9R2VE
DvOA5QfgDG4Kpqhjy0mXas/0GI434FEAeBaRpADzBaZaMMu/keMJWneHMGuK5vQ7AmK8oH0MgXzY
3m4yhc1gmGlouDpOQtCBtW6RjfTa91L94ygi2gDEAGuUuBxLy/G5m6mgGHP4vPp0lhh0FY9SUyHB
ePE5zZMpy+JAkpzxKZAKJH2N1BZkYpbTt31h3zJmVSGq0DlBqMM5qhvMwOThJBsKQVBURC9IH/hu
JjpJ6TcuRYcRohixGjIv90EKDDsBmDYLrZbRfo7oz21NnJrQG+/W5lSA2vPxCOdvMaW8jEzxGJCO
+Ly+zyblni+/47SkdeXRJl+zEG2zbiIbG9uHNqVxBmOJUFvMzZAzm44QU8300OctXLmOJ4i3zTHI
zExfgaD3AwxpA8AmoZaUzMmA0a2FMhaDbDXjN67TBnfR7uBbw7ofdyihBGCp0ns/rYVBpCZdhdlr
xoWBMJkmXxAfpaGMR7FUAFSvmRZSJwDRbJWE0+mlZuVENVP5jJTgMaG1ODy4RLbwl5RgHLYQIbdB
9jigEK2SAymm18AR1OgS+ny+RRVoBusKcutHxdmTpmBs7MR2hoBMcBuw3hAOkY5HcbjqORMRXI8C
YtvSQ2snJEjuHGmQdgItO23KIvZf5F6RbBXHOnNzCPX7JoT6/AOVZ6axMS3yvQELVYujLOpHmh7Y
fsc4ZvJVtYBjuYYMYigIgpydXIgaNzS9LE2By+XmySoL1+HIldelw5WFR4wTv7pu7UdgY0hMKP55
RHtmPMu/i+oAKfVCIKJE7/A4oDCfipw9/p+1TjVIJb0aDrr7L7RBwxBYXBa4n+x8yF4s8DEUtQZP
md5QUHqBFACpWgIl4yTDIbJ1iRzEaPEnIaGd9IyWlGdOnn0dA0jFC7BwXZARyb/MyBbuxnL+8CMe
zdQuS/appmqHSqZ8ZxYSWgFFenGHUUpSYXwYUdOGOxClShbmRbVWD89B9bCglYEwHqGSWMIKJbTF
ljtGEg/cGBMHt1j5pkMbcVaZMyYDpk55zsMhC/BuThc3o8QzRIuagPICjpA5e6XRujzo8bo62EbZ
3QaQG6yUT3SB0MhVfNQACgSvK98zlICRcw8xFgAk0oYzrozJIDHg1AB12hMqCIknnB2BPU4BEP7E
AOjl3bBsM3yaOgMc/vDDnnWkKOrlOodd4I5lAZAKJpGcaI1vqkS5mggKDTZ+koAE+4qZEY1rAHmj
mFNyFtIJUzpBQMIAmE4lJWcUiRtrCfO22NVBmXdukLkcjkCgToYbvDOFwSAhci1Bs+II7QjyZB2N
ttp5I1O9EKY9tB/QOssIZDKKGkwHCYfcQoESDY2RELudP5Q9/Sv0f96zrBmNFoI7vL8iS2A8/r/k
l4/WIybC8uRyRB44IXx0qJSfW5Qt3hPr+JpttjGhjSJrGOvIgoOSnhpbXoOYkOdEvrLZoR2Wt2j3
hIuoYpPUkB4U1XVXgs2NJ13hNjU+MDIwZgp01jiSsYSRUQyUmMGkww4KMlkwvN3f37UPO6q9oBve
0VfY64Iwycit/Sk8RdqTz/JqFSgMYgGzNSGkPWHl48gizegLhSiEe5LoidlaU0E1EAYiB0G0CZOZ
qBhbRgDNOLAFREkNjgdrI/e922JL9YjbJNg0vEcCBd4owTBZj0XMhPEqfljY4B3GDzgXFR39Vauj
r8BCREwN6zgKOlCtLTQJYs2BLsyo2woMq+phxbVUiEiHDEe7tq5oFDFtZSjMdFtmaoiDFhg2mDSy
y+QFdRVDW6sJaGnWy4MCevItAzw6nJn4M6pgFvD37zQBugJakQHAHPPQ5goG2+hlF1NS4b0LAr0O
4twRGxJQ9FK2yisz6JNjWkSyoQAEUHIKFt7bG0pAVCCFYMXDNfhNX5KEtcOCptJzEpL21bDYSR/o
aWkYaLMcw+iCyzOoLRSGKYJmIZjpgTAifdC6M4snEM/TMJH3yMMIrxsAFP6moxFDdTGTQETEI+XT
l6DrG54Pcb2EjW7XaDYRjFEeZJQc8rTlDmb2d4Tbyjf2QDElIjVANpu55f8XckU4UJBI9Zf/
More information about the bazaar
mailing list