aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/ui/crumbs/tasklistmodel.py34
1 files changed, 19 insertions, 15 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/tasklistmodel.py b/bitbake/lib/bb/ui/crumbs/tasklistmodel.py
index 3e74e7fd32..633931dac6 100644
--- a/bitbake/lib/bb/ui/crumbs/tasklistmodel.py
+++ b/bitbake/lib/bb/ui/crumbs/tasklistmodel.py
@@ -327,24 +327,28 @@ class TaskListModel(gtk.ListStore):
If the item isn't a package we leave it included.
"""
def sweep_up(self):
- model = self.contents
- removals = []
it = self.contents.get_iter_first()
-
- while it:
- binb = model.get_value(it, self.COL_BINB)
- itype = model.get_value(it, self.COL_TYPE)
+ while it:
+ binb = self.contents.get_value(it, self.COL_BINB)
+ itype = self.contents.get_value(it, self.COL_TYPE)
+ remove = False
if itype == 'package' and not binb:
- opath = model.convert_path_to_child_path(model.get_path(it))
- if not opath in removals:
- removals.extend(opath)
-
- it = model.iter_next(it)
-
- while removals:
- path = removals.pop()
- self.mark(path)
+ oit = self.contents.convert_iter_to_child_iter(it)
+ opath = self.get_path(oit)
+ self.mark(opath)
+ remove = True
+
+ # When we remove a package from the contents model we alter the
+ # model, so continuing to iterate is bad. *Furthermore* it's
+ # likely that the removal has affected an already iterated item
+ # so we should start from the beginning anyway.
+ # Only when we've managed to iterate the entire contents model
+ # without removing any items do we allow the loop to exit.
+ if remove:
+ it = self.contents.get_iter_first()
+ else:
+ it = self.contents.iter_next(it)
"""
Find the name of an item in the image contents which depends on the item