commit:     ddbe8bd019552573b3f9c1ef2e5701df2edb4dd6
Author:     Frédéric Pierret (fepitre) <frederic.pierret <AT> qubes-os <DOT> 
org>
AuthorDate: Tue Aug 18 15:00:16 2020 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Sep  7 23:31:06 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ddbe8bd0

syncbase: update with newer Gemato proxy parameter in openpgp env

- Handle global proxy setting which is overrided by the one provided
in Portage configuration (if exists).

Bug: https://bugs.gentoo.org/740904
Closes: https://github.com/gentoo/portage/pull/607
See: 
https://github.com/mgorny/gemato/commit/9980de271de4f8f5e993e2b634d0e8d7753e382f
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/sync/modules/git/git.py           | 14 ++++++--------
 lib/portage/sync/modules/rsync/rsync.py       |  7 ++-----
 lib/portage/sync/modules/webrsync/webrsync.py |  4 ++--
 lib/portage/sync/syncbase.py                  | 21 +++++++++++++++++++++
 4 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/lib/portage/sync/modules/git/git.py 
b/lib/portage/sync/modules/git/git.py
index d87f1a601..8065fff33 100644
--- a/lib/portage/sync/modules/git/git.py
+++ b/lib/portage/sync/modules/git/git.py
@@ -207,19 +207,17 @@ class GitSync(NewBase):
                                'sync-git-verify-commit-signature', 
'false').lower() not in ('true', 'yes')):
                        return True
 
-               if self.repo.sync_openpgp_key_path is not None:
-                       if gemato is None:
-                               writemsg_level("!!! Verifying against specified 
key requires gemato-11.0+ installed\n",
+               if self.repo.sync_openpgp_key_path is not None and gemato is 
None:
+                       writemsg_level("!!! Verifying against specified key 
requires gemato-14.5+ installed\n",
                                        level=logging.ERROR, noiselevel=-1)
-                               return False
-                       openpgp_env = gemato.openpgp.OpenPGPEnvironment()
-               else:
-                       openpgp_env = None
+                       return False
+
+               openpgp_env = 
self._get_openpgp_env(self.repo.sync_openpgp_key_path)
 
                try:
                        out = EOutput()
                        env = None
-                       if openpgp_env is not None:
+                       if openpgp_env is not None and 
self.repo.sync_openpgp_key_path is not None:
                                try:
                                        out.einfo('Using keys from %s' % 
(self.repo.sync_openpgp_key_path,))
                                        with 
io.open(self.repo.sync_openpgp_key_path, 'rb') as f:

diff --git a/lib/portage/sync/modules/rsync/rsync.py 
b/lib/portage/sync/modules/rsync/rsync.py
index 35d1461e4..54e285d88 100644
--- a/lib/portage/sync/modules/rsync/rsync.py
+++ b/lib/portage/sync/modules/rsync/rsync.py
@@ -133,10 +133,7 @@ class RsyncSync(NewBase):
                if self.verify_metamanifest and gemato is not None:
                        # Use isolated environment if key is specified,
                        # system environment otherwise
-                       if self.repo.sync_openpgp_key_path is not None:
-                               openpgp_env = 
gemato.openpgp.OpenPGPEnvironment()
-                       else:
-                               openpgp_env = 
gemato.openpgp.OpenPGPSystemEnvironment()
+                       openpgp_env = 
self._get_openpgp_env(self.repo.sync_openpgp_key_path)
 
                try:
                        # Load and update the keyring early. If it fails, then 
verification
@@ -361,7 +358,7 @@ class RsyncSync(NewBase):
                        # if synced successfully, verify now
                        if exitcode == 0 and self.verify_metamanifest:
                                if gemato is None:
-                                       writemsg_level("!!! Unable to verify: 
gemato-11.0+ is required\n",
+                                       writemsg_level("!!! Unable to verify: 
gemato-14.5+ is required\n",
                                                level=logging.ERROR, 
noiselevel=-1)
                                        exitcode = 127
                                else:

diff --git a/lib/portage/sync/modules/webrsync/webrsync.py 
b/lib/portage/sync/modules/webrsync/webrsync.py
index 20cc25a2c..cc0dbc4a9 100644
--- a/lib/portage/sync/modules/webrsync/webrsync.py
+++ b/lib/portage/sync/modules/webrsync/webrsync.py
@@ -75,11 +75,11 @@ class WebRsync(SyncBase):
                                        return (1, False)
 
                                if gemato is None:
-                                       writemsg_level("!!! Verifying against 
specified key requires gemato-11.0+ installed\n",
+                                       writemsg_level("!!! Verifying against 
specified key requires gemato-14.5+ installed\n",
                                                level=logging.ERROR, 
noiselevel=-1)
                                        return (1, False)
 
-                               openpgp_env = 
gemato.openpgp.OpenPGPEnvironment()
+                               openpgp_env = 
self._get_openpgp_env(self.repo.sync_openpgp_key_path)
 
                                out = portage.output.EOutput(quiet=quiet)
                                try:

diff --git a/lib/portage/sync/syncbase.py b/lib/portage/sync/syncbase.py
index 8e83b94fb..6493741c2 100644
--- a/lib/portage/sync/syncbase.py
+++ b/lib/portage/sync/syncbase.py
@@ -20,6 +20,12 @@ from portage.util.futures.retry import retry
 from portage.util.futures.executor.fork import ForkExecutor
 from . import _SUBMODULE_PATH_MAP
 
+try:
+       import gemato.openpgp
+except ImportError:
+       gemato = None
+
+
 class SyncBase:
        '''Base Sync class for subclassing'''
 
@@ -294,6 +300,21 @@ class SyncBase:
                                loop.run_until_complete(decorated_func())
                out.eend(0)
 
+       def _get_openpgp_env(self, openpgp_key_path=None):
+               if gemato is not None:
+                       # Override global proxy setting with one provided in 
emerge configuration
+                       if 'http_proxy' in self.spawn_kwargs['env']:
+                               proxy = self.spawn_kwargs['env']['http_proxy']
+                       else:
+                               proxy = None
+
+                       if openpgp_key_path:
+                               openpgp_env = 
gemato.openpgp.OpenPGPEnvironment(proxy=proxy)
+                       else:
+                               openpgp_env = 
gemato.openpgp.OpenPGPSystemEnvironment(proxy=proxy)
+
+                       return openpgp_env
+
 
 class NewBase(SyncBase):
        '''Subclasses Syncbase adding a new() and runs it

Reply via email to