summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/actions.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/_emerge/actions.py')
-rw-r--r--pym/_emerge/actions.py46
1 files changed, 22 insertions, 24 deletions
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index b12c57116..9f77036e8 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -621,33 +621,18 @@ def calc_depclean(settings, trees, ldpath_mtimes,
root_config = trees[myroot]["root_config"]
psets = root_config.setconfig.psets
deselect = myopts.get('--deselect') != 'n'
-
- required_set_stack = ["world"]
required_sets = {}
- set_args = []
+ required_sets['world'] = psets['world']
- # Recursively create InternalPackageSet instances for world
- # and any sets nested within it.
- while required_set_stack:
- s = required_set_stack.pop()
- if s in required_sets:
- continue
- pset = psets.get(s)
- if pset is not None:
- required_sets[s] = InternalPackageSet(
- initial_atoms=pset.getAtoms())
- for n in pset.getNonAtoms():
- if n.startswith(SETPREFIX):
- required_set_stack.append(n[len(SETPREFIX):])
-
- # When removing packages, use a temporary version of world 'selected'
- # set which excludes packages that are intended to be eligible for
- # removal.
- selected_set = required_sets["selected"]
+ # When removing packages, a temporary version of the world 'selected'
+ # set may be used which excludes packages that are intended to be
+ # eligible for removal.
+ selected_set = psets['selected']
+ required_sets['selected'] = selected_set
protected_set = InternalPackageSet()
protected_set_name = '____depclean_protected_set____'
required_sets[protected_set_name] = protected_set
- system_set = required_sets.get("system")
+ system_set = psets["system"]
if not system_set or not selected_set:
@@ -680,7 +665,11 @@ def calc_depclean(settings, trees, ldpath_mtimes,
if args_set:
if deselect:
- selected_set.clear()
+ # Start with an empty set.
+ selected_set = InternalPackageSet()
+ required_sets['selected'] = selected_set
+ # Pull in any sets nested within the selected set.
+ selected_set.update(psets['selected'].getNonAtoms())
# Pull in everything that's installed but not matched
# by an argument atom since we don't want to clean any
@@ -702,7 +691,11 @@ def calc_depclean(settings, trees, ldpath_mtimes,
elif action == "prune":
if deselect:
- selected_set.clear()
+ # Start with an empty set.
+ selected_set = InternalPackageSet()
+ required_sets['selected'] = selected_set
+ # Pull in any sets nested within the selected set.
+ selected_set.update(psets['selected'].getNonAtoms())
# Pull in everything that's installed since we don't
# to prune a package if something depends on it.
@@ -833,6 +826,11 @@ def calc_depclean(settings, trees, ldpath_mtimes,
def create_cleanlist():
+ if "--debug" in myopts:
+ writemsg("\ndigraph:\n\n", noiselevel=-1)
+ graph.debug_print()
+ writemsg("\n", noiselevel=-1)
+
# Never display the special internal protected_set.
for node in graph:
if isinstance(node, SetArg) and node.name == protected_set_name: