diff options
Diffstat (limited to 'lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py')
-rw-r--r-- | lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py index 7bf5dd141..ec2d5bdfc 100644 --- a/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py +++ b/lib/portage/package/ebuild/_parallel_manifest/ManifestProcess.py @@ -1,6 +1,8 @@ -# Copyright 2012 Gentoo Foundation +# Copyright 2012-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 +import functools + import portage from portage import os from portage.exception import FileNotFound, PermissionDenied, PortagePackageException @@ -9,16 +11,29 @@ from portage.util._async.ForkProcess import ForkProcess class ManifestProcess(ForkProcess): - __slots__ = ("cp", "distdir", "fetchlist_dict", "repo_config") MODIFIED = 16 - def _run(self): - mf = self.repo_config.load_manifest( - os.path.join(self.repo_config.location, self.cp), + def _start(self): + self.target = functools.partial( + self._target, + self.cp, self.distdir, - fetchlist_dict=self.fetchlist_dict, + self.fetchlist_dict, + self.repo_config, + ) + super()._start() + + @staticmethod + def _target(cp, distdir, fetchlist_dict, repo_config): + """ + TODO: Make all arguments picklable for the multiprocessing spawn start method. + """ + mf = repo_config.load_manifest( + os.path.join(repo_config.location, cp), + distdir, + fetchlist_dict=fetchlist_dict, ) try: @@ -31,22 +46,18 @@ class ManifestProcess(ForkProcess): return 1 except PortagePackageException as e: - portage.writemsg(("!!! %s\n") % (e,), noiselevel=-1) + portage.writemsg(f"!!! {e}\n", noiselevel=-1) return 1 try: modified = mf.write(sign=False) except PermissionDenied as e: portage.writemsg( - "!!! %s: %s\n" - % ( - _("Permission Denied"), - e, - ), + f"!!! {_('Permission Denied')}: {e}\n", noiselevel=-1, ) return 1 else: if modified: - return self.MODIFIED + return ManifestProcess.MODIFIED return os.EX_OK |