Patchwork [bitbake-devel] lib/bb/runqueue.py: fix exceptions with -k and failed targets

login
register
mail settings
Submitter Paul Eggleton
Date Sept. 23, 2012, 1:14 p.m.
Message ID <1348406065-8828-1-git-send-email-paul.eggleton@linux.intel.com>
Download mbox | patch
Permalink /patch/37077/
State New
Headers show

Comments

Paul Eggleton - Sept. 23, 2012, 1:14 p.m.
If a target dependency is marked as failed and yet we are continuing on
because -k has been specified, don't try to access the dependency's data
in taskData.build_targets since it will have been removed. This fixes
"IndexError: list index out of range" errors in this situation.

Also, do not print the "unhandled exception" message when SystemExit is
raised since we will have reported the actual error already in this
case (e.g. when -k has been specified and some targets failed).

Fixes [YOCTO #3133].

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
 bitbake/lib/bb/runqueue.py |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
Richard Purdie - Sept. 24, 2012, 11:14 a.m.
On Sun, 2012-09-23 at 14:14 +0100, Paul Eggleton wrote:
> If a target dependency is marked as failed and yet we are continuing on
> because -k has been specified, don't try to access the dependency's data
> in taskData.build_targets since it will have been removed. This fixes
> "IndexError: list index out of range" errors in this situation.
> 
> Also, do not print the "unhandled exception" message when SystemExit is
> raised since we will have reported the actual error already in this
> case (e.g. when -k has been specified and some targets failed).
> 
> Fixes [YOCTO #3133].
> 
> Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
> ---
>  bitbake/lib/bb/runqueue.py |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Merged to master, thanks.

Richard

Patch

diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index bc2eb87..b90b7e7 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -466,7 +466,7 @@  class RunQueueData:
                 # (makes sure sometask runs after targetname's someothertask)
                 idepends = taskData.tasks_idepends[task]
                 for (depid, idependtask) in idepends:
-                    if depid in taskData.build_targets:
+                    if depid in taskData.build_targets and not depid in taskData.failed_deps:
                         # Won't be in build_targets if ASSUME_PROVIDED
                         depdata = taskData.build_targets[depid][0]
                         if depdata is not None:
@@ -932,6 +932,8 @@  class RunQueue:
             return self._execute_runqueue()
         except bb.runqueue.TaskFailure:
             raise
+        except SystemExit:
+            raise
         except:
             logger.error("An uncaught exception occured in runqueue, please see the failure below:")
             self.state = runQueueComplete