commit:     6e6d8e7f522fef3c32a7c71298024167c066a3c5
Author:     Frédéric Pierret (fepitre) <frederic.pierret <AT> qubes-os <DOT> 
org>
AuthorDate: Thu Aug 20 09:35:23 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Sep  7 22:23:08 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=6e6d8e7f

Use portage proxy settings for fetching BINPKG host

Bug: https://bugs.gentoo.org/740898
See: https://github.com/gentoo/portage/pull/607
Signed-off-by: Frédéric Pierret (fepitre) <frederic.pierret <AT> qubes-os.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/dbapi/bintree.py |  9 ++++++++-
 lib/portage/util/_urlopen.py | 10 +++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/lib/portage/dbapi/bintree.py b/lib/portage/dbapi/bintree.py
index 620865a79..ee30542a5 100644
--- a/lib/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@ -964,11 +964,18 @@ class binarytree:
                                                download_timestamp + ttl > 
time.time():
                                                raise 
UseCachedCopyOfRemoteIndex()
 
+                               # Set proxy settings for _urlopen -> 
urllib_request
+                               proxies = {}
+                               for proto in ('http', 'https'):
+                                       value = self.settings.get(proto + 
'_proxy')
+                                       if value is not None:
+                                               proxies[proto] = value
+
                                # Don't use urlopen for https, unless
                                # PEP 476 is supported (bug #469888).
                                if parsed_url.scheme not in ('https',) or 
_have_pep_476():
                                        try:
-                                               f = _urlopen(url, 
if_modified_since=local_timestamp)
+                                               f = _urlopen(url, 
if_modified_since=local_timestamp, proxies=proxies)
                                                if hasattr(f, 'headers') and 
f.headers.get('timestamp', ''):
                                                        remote_timestamp = 
f.headers.get('timestamp')
                                        except IOError as err:

diff --git a/lib/portage/util/_urlopen.py b/lib/portage/util/_urlopen.py
index b46d1554c..b67d02739 100644
--- a/lib/portage/util/_urlopen.py
+++ b/lib/portage/util/_urlopen.py
@@ -26,7 +26,7 @@ def have_pep_476():
        return hasattr(__import__('ssl'), '_create_unverified_context')
 
 
-def urlopen(url, if_modified_since=None):
+def urlopen(url, if_modified_since=None, proxies=None):
        parse_result = urllib_parse.urlparse(url)
        if parse_result.scheme not in ("http", "https"):
                return _urlopen(url)
@@ -40,8 +40,12 @@ def urlopen(url, if_modified_since=None):
                request.add_header('If-Modified-Since', 
_timestamp_to_http(if_modified_since))
        if parse_result.username is not None:
                password_manager.add_password(None, url, parse_result.username, 
parse_result.password)
-       auth_handler = CompressedResponseProcessor(password_manager)
-       opener = urllib_request.build_opener(auth_handler)
+
+       handlers = [CompressedResponseProcessor(password_manager)]
+       if proxies:
+               handlers.append(urllib_request.ProxyHandler(proxies))
+       opener = urllib_request.build_opener(*handlers)
+
        hdl = opener.open(request)
        if hdl.headers.get('last-modified', ''):
                try:

Reply via email to