128
128
self.get(key).insert(0,
129
129
registry._LazyObjectGetter(module_name, member_name))
131
def register_transport(self, key, help=None, default_port=None):
132
self.register(key, [], help, default_port)
131
def register_transport(self, key, help=None):
132
self.register(key, [], help)
134
134
def set_default_transport(self, key=None):
135
135
"""Return either 'key' or the default key if key is None"""
136
136
self._default_key = key
138
def get_default_port(self, scheme):
139
"""Return the registered default port for this protocol scheme."""
141
return self.get_info(scheme + '://')
146
139
transport_list_registry = TransportListRegistry()
149
def register_transport_proto(prefix, help=None, info=None, default_port=None,
142
def register_transport_proto(prefix, help=None, info=None,
150
143
register_netloc=False):
151
transport_list_registry.register_transport(prefix, help, default_port)
144
transport_list_registry.register_transport(prefix, help)
152
145
if register_netloc:
153
146
assert prefix.endswith('://')
154
147
register_urlparse_netloc_protocol(prefix[:-3])
1396
1385
# have one so that it doesn't get accidentally
1398
1387
netloc = '%s@%s' % (urllib.quote(user), netloc)
1399
if (port is not None and
1400
port != transport_list_registry.get_default_port(scheme)):
1401
# Include the port in the netloc (unless it's the same as the
1402
# default, in which case we omit it as it is redundant).
1388
if port is not None:
1403
1389
netloc = '%s:%d' % (netloc, port)
1404
1390
path = urllib.quote(path)
1405
1391
return urlparse.urlunparse((scheme, netloc, path, None, None, None))
1730
1714
# Decorated http transport
1731
1715
register_transport_proto('http+urllib://',
1732
1716
# help="Read-only access of branches exported on the web."
1733
default_port=80, register_netloc=True)
1717
register_netloc=True)
1734
1718
register_lazy_transport('http+urllib://', 'bzrlib.transport.http._urllib',
1735
1719
'HttpTransport_urllib')
1736
1720
register_transport_proto('https+urllib://',
1737
1721
# help="Read-only access of branches exported on the web using SSL."
1738
default_port=443, register_netloc=True)
1722
register_netloc=True)
1739
1723
register_lazy_transport('https+urllib://', 'bzrlib.transport.http._urllib',
1740
1724
'HttpTransport_urllib')
1741
1725
register_transport_proto('http+pycurl://',
1742
1726
# help="Read-only access of branches exported on the web."
1743
default_port=80, register_netloc=True)
1727
register_netloc=True)
1744
1728
register_lazy_transport('http+pycurl://', 'bzrlib.transport.http._pycurl',
1745
1729
'PyCurlTransport')
1746
1730
register_transport_proto('https+pycurl://',
1747
1731
# help="Read-only access of branches exported on the web using SSL."
1748
default_port=443, register_netloc=True)
1732
register_netloc=True)
1749
1733
register_lazy_transport('https+pycurl://', 'bzrlib.transport.http._pycurl',
1750
1734
'PyCurlTransport')
1751
1735
# Default http transports (last declared wins (if it can be imported))
1752
1736
register_transport_proto('http://',
1753
help="Read-only access of branches exported on the web.",
1737
help="Read-only access of branches exported on the web.")
1755
1738
register_transport_proto('https://',
1756
help="Read-only access of branches exported on the web using SSL.",
1739
help="Read-only access of branches exported on the web using SSL.")
1758
1740
register_lazy_transport('http://', 'bzrlib.transport.http._urllib',
1759
1741
'HttpTransport_urllib')
1760
1742
register_lazy_transport('https://', 'bzrlib.transport.http._urllib',
1761
1743
'HttpTransport_urllib')
1762
register_lazy_transport('http://', 'bzrlib.transport.http._pycurl', 'PyCurlTransport')
1763
register_lazy_transport('https://', 'bzrlib.transport.http._pycurl', 'PyCurlTransport')
1744
register_lazy_transport('http://', 'bzrlib.transport.http._pycurl',
1746
register_lazy_transport('https://', 'bzrlib.transport.http._pycurl',
1765
register_transport_proto('ftp://',
1766
help="Access using passive FTP.",
1749
register_transport_proto('ftp://', help="Access using passive FTP.")
1768
1750
register_lazy_transport('ftp://', 'bzrlib.transport.ftp', 'FtpTransport')
1769
register_transport_proto('aftp://',
1770
help="Access using active FTP.",
1751
register_transport_proto('aftp://', help="Access using active FTP.")
1772
1752
register_lazy_transport('aftp://', 'bzrlib.transport.ftp', 'FtpTransport')
1774
1754
register_transport_proto('memory://')
1775
register_lazy_transport('memory://', 'bzrlib.transport.memory', 'MemoryTransport')
1755
register_lazy_transport('memory://', 'bzrlib.transport.memory',
1777
1758
# chroots cannot be implicitly accessed, they must be explicitly created:
1778
1759
register_transport_proto('chroot+')
1780
1761
register_transport_proto('readonly+',
1781
1762
# help="This modifier converts any transport to be readonly."
1783
register_lazy_transport('readonly+', 'bzrlib.transport.readonly', 'ReadonlyTransportDecorator')
1764
register_lazy_transport('readonly+', 'bzrlib.transport.readonly',
1765
'ReadonlyTransportDecorator')
1785
1767
register_transport_proto('fakenfs+')
1786
register_lazy_transport('fakenfs+', 'bzrlib.transport.fakenfs', 'FakeNFSTransportDecorator')
1768
register_lazy_transport('fakenfs+', 'bzrlib.transport.fakenfs',
1769
'FakeNFSTransportDecorator')
1788
1771
register_transport_proto('trace+')
1789
register_lazy_transport('trace+', 'bzrlib.transport.trace', 'TransportTraceDecorator')
1772
register_lazy_transport('trace+', 'bzrlib.transport.trace',
1773
'TransportTraceDecorator')
1791
1775
register_transport_proto('unlistable+')
1792
register_lazy_transport('unlistable+', 'bzrlib.transport.unlistable', 'UnlistableTransportDecorator')
1776
register_lazy_transport('unlistable+', 'bzrlib.transport.unlistable',
1777
'UnlistableTransportDecorator')
1794
1779
register_transport_proto('brokenrename+')
1795
1780
register_lazy_transport('brokenrename+', 'bzrlib.transport.brokenrename',
1796
'BrokenRenameTransportDecorator')
1781
'BrokenRenameTransportDecorator')
1798
1783
register_transport_proto('vfat+')
1799
1784
register_lazy_transport('vfat+',
1809
1794
register_transport_proto('bzr://',
1810
1795
help="Fast access using the Bazaar smart server.",
1811
default_port=4155, register_netloc=True)
1796
register_netloc=True)
1813
register_lazy_transport('bzr://',
1814
'bzrlib.transport.remote',
1798
register_lazy_transport('bzr://', 'bzrlib.transport.remote',
1815
1799
'RemoteTCPTransport')
1816
1800
register_transport_proto('bzr+http://',
1817
1801
# help="Fast access using the Bazaar smart server over HTTP."
1818
default_port=80, register_netloc=True)
1819
register_lazy_transport('bzr+http://',
1820
'bzrlib.transport.remote',
1802
register_netloc=True)
1803
register_lazy_transport('bzr+http://', 'bzrlib.transport.remote',
1821
1804
'RemoteHTTPTransport')
1822
1805
register_transport_proto('bzr+https://',
1823
1806
# help="Fast access using the Bazaar smart server over HTTPS."
1824
register_netloc=True)
1807
register_netloc=True)
1825
1808
register_lazy_transport('bzr+https://',
1826
1809
'bzrlib.transport.remote',
1827
1810
'RemoteHTTPTransport')
1828
# Note that bzr+ssh:// has no default_port, because the user's ~/.ssh/config
1829
# can set it to arbitrary values based on hostname.
1830
1811
register_transport_proto('bzr+ssh://',
1831
1812
help="Fast access using the Bazaar smart server over SSH.",
1832
1813
register_netloc=True)
1833
register_lazy_transport('bzr+ssh://',
1834
'bzrlib.transport.remote',
1814
register_lazy_transport('bzr+ssh://', 'bzrlib.transport.remote',
1835
1815
'RemoteSSHTransport')