ui/crumbs/tasklistmodel: fix automatic removal of orphaned items

The sweep_up() method intends to remove all packages with an empty brought in
by column, this patch changes the implementation to be more reliable.

Each time a removal is triggered we begin interating the contents model again
at the beginning, only once the contents model has been iterated from start
to finish without any removals can we be certain that there will be no more
orphaned items.

Fixes [YOCTO #1218]

(Bitbake rev: 4803c6d3d1db31105d98a7f71596875333db0dc5)

Signed-off-by: Joshua Lock <josh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Joshua Lock
2011-07-12 14:48:59 -07:00
committed by Richard Purdie
parent e5c961714c
commit 80441de058

View File

@@ -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)
oit = self.contents.convert_iter_to_child_iter(it)
opath = self.get_path(oit)
self.mark(opath)
remove = True
it = model.iter_next(it)
while removals:
path = removals.pop()
self.mark(path)
# 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