EbuildBuild: handle empty PORTAGE_BINPKG_FORMAT
Also, make TaskSequence._start_next_task() call exit hooks if the
queue happens to be empty.
X-Gentoo-Bug: 506186
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=506186
diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py
index e13b1cf..86a5631 100644
--- a/pym/_emerge/EbuildBuild.py
+++ b/pym/_emerge/EbuildBuild.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2013 Gentoo Foundation
+# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from _emerge.EbuildExecuter import EbuildExecuter
@@ -321,7 +321,12 @@
pkg=self.pkg, scheduler=self.scheduler,
settings=self.settings))
- self._start_task(binpkg_tasks, self._buildpkg_exit)
+ if binpkg_tasks:
+ self._start_task(binpkg_tasks, self._buildpkg_exit)
+ return
+
+ self._final_exit(build)
+ self.wait()
def _buildpkg_exit(self, packager):
"""
diff --git a/pym/_emerge/TaskSequence.py b/pym/_emerge/TaskSequence.py
index b4bfefe..1f2ba94 100644
--- a/pym/_emerge/TaskSequence.py
+++ b/pym/_emerge/TaskSequence.py
@@ -1,10 +1,12 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
+import sys
+from collections import deque
+
from portage import os
from _emerge.CompositeTask import CompositeTask
from _emerge.AsynchronousTask import AsynchronousTask
-from collections import deque
class TaskSequence(CompositeTask):
"""
@@ -30,9 +32,15 @@
CompositeTask._cancel(self)
def _start_next_task(self):
- if self._task_queue:
- self._start_task(self._task_queue.popleft(),
- self._task_exit_handler)
+ try:
+ task = self._task_queue.popleft()
+ except IndexError:
+ self._current_task = None
+ self.returncode = os.EX_OK
+ self.wait()
+ return
+
+ self._start_task(task, self._task_exit_handler)
def _task_exit_handler(self, task):
if self._default_exit(task) != os.EX_OK:
@@ -43,3 +51,11 @@
self._final_exit(task)
self.wait()
+ def __bool__(self):
+ return bool(self._task_queue)
+
+ if sys.hexversion < 0x3000000:
+ __nonzero__ = __bool__
+
+ def __len__(self):
+ return len(self._task_queue)