diff options
author | David James <davidjames@google.com> | 2011-03-24 19:36:33 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-03-24 19:36:33 -0700 |
commit | 7535cabdf2fab76fc55df83643157613dfd66be9 (patch) | |
tree | 535e51878faa5359a7c186ca0aadfbe6ebcc02b2 /pym/_emerge/Binpkg.py | |
parent | 99ec2a8f810ae7ea2c76d928665ed1d02c2d9cc7 (diff) | |
download | portage-7535cabdf2fab76fc55df83643157613dfd66be9.tar.gz portage-7535cabdf2fab76fc55df83643157613dfd66be9.tar.bz2 portage-7535cabdf2fab76fc55df83643157613dfd66be9.zip |
Merge packages asynchronously in Portage.
This allows for the scheduler to continue to run while packages are
being merged and installed, allowing for additional parallelism and
making better use of the CPUs.
Review URL: http://codereview.chromium.org/6713043
Diffstat (limited to 'pym/_emerge/Binpkg.py')
-rw-r--r-- | pym/_emerge/Binpkg.py | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/pym/_emerge/Binpkg.py b/pym/_emerge/Binpkg.py index 00587451a..62d44c48f 100644 --- a/pym/_emerge/Binpkg.py +++ b/pym/_emerge/Binpkg.py @@ -307,7 +307,7 @@ class Binpkg(CompositeTask): portage.elog.elog_process(self.pkg.cpv, self.settings) self._build_dir.unlock() - def install(self): + def install(self, handler): # This gives bashrc users an opportunity to do various things # such as remove binary packages after they're installed. @@ -320,19 +320,20 @@ class Binpkg(CompositeTask): pkg=self.pkg, pkg_count=self.pkg_count, pkg_path=self._pkg_path, scheduler=self.scheduler, settings=settings, tree=self._tree, world_atom=self.world_atom) + task = merge.create_task() + task.addExitListener(self._install_exit) + self._start_task(task, handler) - try: - retval = merge.execute() - finally: - settings.pop("PORTAGE_BINPKG_FILE", None) - self._unlock_builddir() + def _install_exit(self, task): + self.settings.pop("PORTAGE_BINPKG_FILE", None) + self._unlock_builddir() - if retval == os.EX_OK and \ - 'binpkg-logs' not in self.settings.features and \ + if self._default_final_exit(task) != os.EX_OK: + return + + if 'binpkg-logs' not in self.settings.features and \ self.settings.get("PORTAGE_LOG_FILE"): try: os.unlink(self.settings["PORTAGE_LOG_FILE"]) except OSError: pass - return retval - |