summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/ui/crumbs/tasklistmodel.py25
1 files changed, 22 insertions, 3 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/tasklistmodel.py b/bitbake/lib/bb/ui/crumbs/tasklistmodel.py
index ee6ebf8754..d7dff3c053 100644
--- a/bitbake/lib/bb/ui/crumbs/tasklistmodel.py
+++ b/bitbake/lib/bb/ui/crumbs/tasklistmodel.py
@@ -306,11 +306,15 @@ class TaskListModel(gtk.ListStore):
306 self[path][self.COL_INC] = False 306 self[path][self.COL_INC] = False
307 307
308 """ 308 """
309 recursively called to mark the item at opath and any package which 309 Recursively called to mark the item at opath and any package which
310 depends on it for removal 310 depends on it for removal.
311 NOTE: This method dumbly removes user selected packages and since we don't
312 do significant reverse dependency tracking it's easier and simpler to save
313 the items marked as user selected and re-add them once the removal sweep is
314 complete.
311 """ 315 """
312 def mark(self, opath): 316 def mark(self, opath):
313 removals = [] 317 usersel = {}
314 it = self.get_iter_first() 318 it = self.get_iter_first()
315 name = self[opath][self.COL_NAME] 319 name = self[opath][self.COL_NAME]
316 320
@@ -325,19 +329,34 @@ class TaskListModel(gtk.ListStore):
325 deps = self[path][self.COL_DEPS] 329 deps = self[path][self.COL_DEPS]
326 binb = self[path][self.COL_BINB] 330 binb = self[path][self.COL_BINB]
327 itype = self[path][self.COL_TYPE] 331 itype = self[path][self.COL_TYPE]
332 iname = self[path][self.COL_NAME]
328 333
329 # We ignore anything that isn't a package 334 # We ignore anything that isn't a package
330 if not itype == "package": 335 if not itype == "package":
331 continue 336 continue
332 337
338 # If the user added this item and it's not the item we're removing
339 # we should keep it and its dependencies, the easiest way to do so
340 # is to save its name and re-mark it for inclusion once dependency
341 # processing is complete
342 if binb == "User Selected":
343 usersel[iname] = self[path][self.COL_IMG]
344
333 # FIXME: need to ensure partial name matching doesn't happen 345 # FIXME: need to ensure partial name matching doesn't happen
334 if inc and deps.count(name): 346 if inc and deps.count(name):
335 # found a dependency, remove it 347 # found a dependency, remove it
336 self.mark(path) 348 self.mark(path)
349
337 if inc and binb.count(name): 350 if inc and binb.count(name):
338 bib = self.find_alt_dependency(name) 351 bib = self.find_alt_dependency(name)
339 self[path][self.COL_BINB] = bib 352 self[path][self.COL_BINB] = bib
340 353
354 # Re-add any removed user selected items
355 for u in usersel:
356 npath = self.find_path_for_item(u)
357 self.include_item(item_path=npath,
358 binb="User Selected",
359 image_contents=usersel[u])
341 """ 360 """
342 Remove items from contents if the have an empty COL_BINB (brought in by) 361 Remove items from contents if the have an empty COL_BINB (brought in by)
343 caused by all packages they are a dependency of being removed. 362 caused by all packages they are a dependency of being removed.