summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/MergeListItem.py
diff options
context:
space:
mode:
authorDavid James <davidjames@google.com>2011-03-24 19:36:33 -0700
committerZac Medico <zmedico@gentoo.org>2011-03-24 19:36:33 -0700
commit7535cabdf2fab76fc55df83643157613dfd66be9 (patch)
tree535e51878faa5359a7c186ca0aadfbe6ebcc02b2 /pym/_emerge/MergeListItem.py
parent99ec2a8f810ae7ea2c76d928665ed1d02c2d9cc7 (diff)
downloadportage-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/MergeListItem.py')
-rw-r--r--pym/_emerge/MergeListItem.py21
1 files changed, 10 insertions, 11 deletions
diff --git a/pym/_emerge/MergeListItem.py b/pym/_emerge/MergeListItem.py
index 1dcc1780a..768865e6b 100644
--- a/pym/_emerge/MergeListItem.py
+++ b/pym/_emerge/MergeListItem.py
@@ -111,7 +111,7 @@ class MergeListItem(CompositeTask):
self._install_task.wait()
return self.returncode
- def merge(self):
+ def merge(self, exit_handler):
pkg = self.pkg
build_opts = self.build_opts
@@ -135,15 +135,14 @@ class MergeListItem(CompositeTask):
world_atom=world_atom)
uninstall.start()
- retval = uninstall.wait()
- if retval != os.EX_OK:
- return retval
- return os.EX_OK
-
- if build_opts.fetchonly or \
+ self.returncode = uninstall.wait()
+ else:
+ self.returncode = os.EX_OK
+ exit_handler(self)
+ elif build_opts.fetchonly or \
build_opts.buildpkgonly:
- return self.returncode
-
- retval = self._install_task.install()
- return retval
+ exit_handler(self)
+ else:
+ self._current_task = self._install_task
+ self._install_task.install(exit_handler)