Asynchronously lock the build directory, and use AsyncTaskFuture to fit the resulting future into the CompositeTask framework that Binpkg uses.
Bug: https://bugs.gentoo.org/614112 --- pym/_emerge/Binpkg.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/pym/_emerge/Binpkg.py b/pym/_emerge/Binpkg.py index 09a1fe680..e9c5ef568 100644 --- a/pym/_emerge/Binpkg.py +++ b/pym/_emerge/Binpkg.py @@ -112,15 +112,25 @@ class Binpkg(CompositeTask): self.wait() return - pkg = self.pkg - pkg_count = self.pkg_count if not (self.opts.pretend or self.opts.fetchonly): - self._build_dir.lock() + self._start_task( + AsyncTaskFuture(future=self._build_dir.async_lock()), + self._start_fetcher) + else: + self._start_fetcher() + + def _start_fetcher(self, lock_task=None): + if lock_task is not None: + self._assert_current(lock_task) + lock_task.future.result() # Initialize PORTAGE_LOG_FILE (clean_log won't work without it). portage.prepare_build_dirs(self.settings["ROOT"], self.settings, 1) # If necessary, discard old log so that we don't # append to it. self._build_dir.clean_log() + + pkg = self.pkg + pkg_count = self.pkg_count fetcher = BinpkgFetcher(background=self.background, logfile=self.settings.get("PORTAGE_LOG_FILE"), pkg=self.pkg, pretend=self.opts.pretend, scheduler=self.scheduler) -- 2.13.6