mirror of
https://git.yoctoproject.org/poky
synced 2026-04-18 03:32:13 +02:00
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:
committed by
Richard Purdie
parent
e5c961714c
commit
80441de058
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user