summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/depgraph.py
diff options
context:
space:
mode:
authorSebastian Luther <SebastianLuther@gmx.de>2010-04-29 07:54:17 +0200
committerZac Medico <zmedico@gentoo.org>2010-04-29 05:54:01 -0700
commit87250d0cdfa74598f1564668cc446cd3ae1cf9a0 (patch)
treeffbaa9f1bc2c8d750d3aa5b80896e9b7f2f08a38 /pym/_emerge/depgraph.py
parent13e7e7277b50c525c31588e52953b9defbe07e8b (diff)
downloadportage-87250d0cdfa74598f1564668cc446cd3ae1cf9a0.tar.gz
portage-87250d0cdfa74598f1564668cc446cd3ae1cf9a0.tar.bz2
portage-87250d0cdfa74598f1564668cc446cd3ae1cf9a0.zip
Add --exclude option
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: