summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/__init__.py40
1 files changed, 26 insertions, 14 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index d48b4a1a1..3f8ab808c 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -890,7 +890,7 @@ def iter_atoms(deps):
yield x
class Package(object):
- __slots__ = ("__weakref__", "built", "cpv",
+ __slots__ = ("__weakref__", "built", "cpv", "depth",
"installed", "metadata", "root", "onlydeps", "type_name",
"_digraph_node", "_slot_atom")
def __init__(self, **kwargs):
@@ -917,7 +917,7 @@ class Package(object):
return self._digraph_node
class Dependency(object):
- __slots__ = ("__weakref__", "arg", "atom", "blocker", "depth",
+ __slots__ = ("__weakref__", "atom", "blocker", "depth",
"parent", "priority", "root")
def __init__(self, **kwargs):
for myattr in self.__slots__:
@@ -1280,6 +1280,10 @@ class depgraph(object):
dep_stack = self._dep_stack
while dep_stack:
dep = dep_stack.pop()
+ if isinstance(dep, Package):
+ if not self._add_pkg_deps(dep):
+ return 0
+ continue
update = "--update" in self.myopts and dep.depth <= 1
if dep.blocker:
if not buildpkgonly and \
@@ -1361,10 +1365,7 @@ class depgraph(object):
# select the correct /var database that we'll be checking against
vardbapi = self.trees[myroot]["vartree"].dbapi
- portdb = self.trees[myroot]["porttree"].dbapi
- bindb = self.trees[myroot]["bintree"].dbapi
pkgsettings = self.pkgsettings[myroot]
- myuse = metadata["USE"].split()
if not arg and myroot == self.target_root:
try:
@@ -1494,9 +1495,21 @@ class depgraph(object):
self.spinner.update()
- """ Check DEPEND/RDEPEND/PDEPEND/SLOT
- Pull from bintree if it's binary package, porttree if it's ebuild.
- Binpkg's can be either remote or local. """
+ if arg:
+ depth = 0
+ pkg.depth = depth
+ dep_stack.append(pkg)
+ return 1
+
+ def _add_pkg_deps(self, pkg):
+
+ mytype = pkg.type_name
+ myroot = pkg.root
+ mykey = pkg.cpv
+ metadata = pkg.metadata
+ myuse = metadata["USE"].split()
+ jbigkey = pkg.digraph_node
+ depth = pkg.depth + 1
edepend={}
depkeys = ["DEPEND","RDEPEND","PDEPEND"]
@@ -1529,9 +1542,6 @@ class depgraph(object):
(myroot, edepend["PDEPEND"], DepPriority(runtime_post=True))
)
- if arg:
- depth = 0
- depth += 1
debug = "--debug" in self.myopts
strict = mytype != "installed"
try:
@@ -1559,8 +1569,8 @@ class depgraph(object):
mypriority = dep_priority.copy()
if not blocker and vardb.match(atom):
mypriority.satisfied = True
- dep_stack.append(
- Dependency(arg=arg, atom=atom,
+ self._dep_stack.append(
+ Dependency(atom=atom,
blocker=blocker, depth=depth, parent=pkg,
priority=mypriority, root=dep_root))
if debug:
@@ -1580,6 +1590,7 @@ class depgraph(object):
"!!! This binary package cannot be installed: '%s'\n" % \
mykey, noiselevel=-1)
elif mytype == "ebuild":
+ portdb = self.roots[myroot].trees["porttree"].dbapi
myebuild, mylocation = portdb.findname2(mykey)
portage.writemsg("!!! This ebuild cannot be installed: " + \
"'%s'\n" % myebuild, noiselevel=-1)
@@ -5914,7 +5925,8 @@ def action_depclean(settings, trees, ldpath_mtimes,
try:
arg_atom = args_set.findAtomForPackage(pkg, metadata)
except portage.exception.InvalidDependString, e:
- file_path = os.path.join(myroot, VDB_PATH, pkg, "PROVIDE")
+ file_path = os.path.join(
+ myroot, portage.VDB_PATH, pkg, "PROVIDE")
portage.writemsg("\n\nInvalid PROVIDE: %s\n" % str(s),
noiselevel=-1)
portage.writemsg("See '%s'\n" % file_path,