summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/depgraph.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/_emerge/depgraph.py')
-rw-r--r--pym/_emerge/depgraph.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index c3e180faf..005c2979c 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -93,6 +93,24 @@ class _frozen_depgraph_config(object):
self._required_set_names = set(["world"])
+ self.excluded_pkgs = InternalPackageSet()
+ for x in myopts.get("--exclude", []):
+ cat = x.cp.split("/")[0]
+ if cat == "null":
+ pkgname = x.cp.split("/")[1]
+ for myroot in trees:
+ for tree in ("porttree", "bintree"):
+ if tree == "bintree" and not "--usepkg" in myopts:
+ continue
+ db = self.trees[myroot][tree].dbapi
+ for cat in db.categories:
+ if db.cp_list(cat + "/" + pkgname):
+ atom = portage.dep.Atom(str(x).replace("null", cat))
+ self.excluded_pkgs.add(atom)
+ else:
+ self.excluded_pkgs.add(x)
+
+
class _dynamic_depgraph_config(object):
def __init__(self, depgraph, myparams, allow_backtracking,
@@ -2173,6 +2191,8 @@ class depgraph(object):
mreasons.append('backtracking: %s' % \
', '.join(sorted(backtrack_reasons)))
backtrack_mask = True
+ if not mreasons and self._frozen_config.excluded_pkgs.findAtomForPackage(pkg):
+ mreasons = ["exclude option"]
if mreasons:
masked_pkg_instances.add(pkg)
if atom.use:
@@ -2451,6 +2471,10 @@ class depgraph(object):
# The package has been masked by the backtracking logic
continue
+ if not pkg.installed and \
+ self._frozen_config.excluded_pkgs.findAtomForPackage(pkg):
+ continue
+
if dont_miss_updates:
higher_version_rejected = False
for rejected in packages_with_invalid_use_config: