Rev 5220: (robertc) Fix lp: urls behind an https proxy. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Mon May 10 18:26:18 BST 2010
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 5220 [merge]
revision-id: pqm at pqm.ubuntu.com-20100510172615-7d4a13a5a2omyo0f
parent: pqm at pqm.ubuntu.com-20100510144914-yu9cxq3ihu2xwm4z
parent: robertc at robertcollins.net-20100508055628-343ybpkbcldj074l
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2010-05-10 18:26:15 +0100
message:
(robertc) Fix lp: urls behind an https proxy.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
=== modified file 'NEWS'
--- a/NEWS 2010-05-06 06:51:11 +0000
+++ b/NEWS 2010-05-10 17:26:15 +0000
@@ -101,6 +101,9 @@
messages.
(Parth Malwankar, #563646)
+* Using bzr with `lp:` urls behind an http proxy should work.
+ (Robert Collins, #558343)
+
Improvements
************
=== modified file 'bzrlib/transport/http/_urllib2_wrappers.py'
--- a/bzrlib/transport/http/_urllib2_wrappers.py 2010-02-17 17:11:16 +0000
+++ b/bzrlib/transport/http/_urllib2_wrappers.py 2010-05-08 05:56:28 +0000
@@ -378,6 +378,11 @@
port = conn_class.default_port
self.proxied_host = '%s:%s' % (host, port)
urllib2.Request.set_proxy(self, proxy, type)
+ # When urllib2 makes a https request with our wrapper code and a proxy,
+ # it sets Host to the https proxy, not the host we want to talk to.
+ # I'm fairly sure this is our fault, but what is the cause is an open
+ # question. -- Robert Collins May 8 2010.
+ self.add_unredirected_header('Host', self.proxied_host)
class _ConnectRequest(Request):
@@ -711,7 +716,7 @@
connect = _ConnectRequest(request)
response = self.parent.open(connect)
if response.code != 200:
- raise ConnectionError("Can't connect to %s via proxy %s" % (
+ raise errors.ConnectionError("Can't connect to %s via proxy %s" % (
connect.proxied_host, self.host))
# Housekeeping
connection.cleanup_pipe()
@@ -868,21 +873,19 @@
print 'Will unbind %s_open for %r' % (type, proxy)
delattr(self, '%s_open' % type)
+ def bind_scheme_request(proxy, scheme):
+ if proxy is None:
+ return
+ scheme_request = scheme + '_request'
+ if self._debuglevel >= 3:
+ print 'Will bind %s for %r' % (scheme_request, proxy)
+ setattr(self, scheme_request,
+ lambda request: self.set_proxy(request, scheme))
# We are interested only by the http[s] proxies
http_proxy = self.get_proxy_env_var('http')
+ bind_scheme_request(http_proxy, 'http')
https_proxy = self.get_proxy_env_var('https')
-
- if http_proxy is not None:
- if self._debuglevel >= 3:
- print 'Will bind http_request for %r' % http_proxy
- setattr(self, 'http_request',
- lambda request: self.set_proxy(request, 'http'))
-
- if https_proxy is not None:
- if self._debuglevel >= 3:
- print 'Will bind http_request for %r' % https_proxy
- setattr(self, 'https_request',
- lambda request: self.set_proxy(request, 'https'))
+ bind_scheme_request(https_proxy, 'https')
def get_proxy_env_var(self, name, default_to='all'):
"""Get a proxy env var.
More information about the bazaar-commits
mailing list