summaryrefslogtreecommitdiffstats
path: root/pym/_emerge
diff options
context:
space:
mode:
Diffstat (limited to 'pym/_emerge')
-rw-r--r--pym/_emerge/FakeVartree.py6
-rw-r--r--pym/_emerge/Package.py4
-rw-r--r--pym/_emerge/actions.py3
-rw-r--r--pym/_emerge/depgraph.py55
-rw-r--r--pym/_emerge/main.py1
5 files changed, 41 insertions, 28 deletions
diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py
index fb1281c29..b3c913348 100644
--- a/pym/_emerge/FakeVartree.py
+++ b/pym/_emerge/FakeVartree.py
@@ -75,7 +75,8 @@ class FakeVartree(vartree):
self.dbapi.aux_get = self._aux_get_wrapper
self.dbapi.match = self._match_wrapper
self._aux_get_history = set()
- self._portdb_keys = ["EAPI", "KEYWORDS", "DEPEND", "RDEPEND", "PDEPEND"]
+ self._portdb_keys = ["EAPI", "DEPEND", "HDEPEND",
+ "KEYWORDS", "PDEPEND", "RDEPEND"]
self._portdb = portdb
self._global_updates = None
@@ -286,7 +287,8 @@ def grab_global_updates(portdb):
return retupdates
def perform_global_updates(mycpv, mydb, myupdates):
- aux_keys = ["DEPEND", "EAPI", "RDEPEND", "PDEPEND", 'repository']
+ aux_keys = ["DEPEND", "EAPI", "HDEPEND",
+ "RDEPEND", "PDEPEND", 'repository']
aux_dict = dict(zip(aux_keys, mydb.aux_get(mycpv, aux_keys)))
eapi = aux_dict.pop('EAPI')
repository = aux_dict.pop('repository')
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index e10140f5c..af329a128 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -36,12 +36,12 @@ class Package(Task):
metadata_keys = [
"BUILD_TIME", "CHOST", "COUNTER", "DEPEND", "EAPI",
- "INHERITED", "IUSE", "KEYWORDS",
+ "HDEPEND", "INHERITED", "IUSE", "KEYWORDS",
"LICENSE", "PDEPEND", "PROVIDE", "RDEPEND",
"repository", "PROPERTIES", "RESTRICT", "SLOT", "USE",
"_mtime_", "DEFINED_PHASES", "REQUIRED_USE"]
- _dep_keys = ('DEPEND', 'PDEPEND', 'RDEPEND',)
+ _dep_keys = ('DEPEND', 'HDEPEND' 'PDEPEND', 'RDEPEND',)
_use_conditional_misc_keys = ('LICENSE', 'PROPERTIES', 'RESTRICT')
UNKNOWN_REPO = _unknown_repo
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 4b16dc9dc..af7ae8f7e 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1147,13 +1147,14 @@ def calc_depclean(settings, trees, ldpath_mtimes,
graph = digraph()
del cleanlist[:]
- dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"]
+ dep_keys = ["DEPEND", "HDEPEND", "RDEPEND", "PDEPEND"]
runtime = UnmergeDepPriority(runtime=True)
runtime_post = UnmergeDepPriority(runtime_post=True)
buildtime = UnmergeDepPriority(buildtime=True)
priority_map = {
"RDEPEND": runtime,
"PDEPEND": runtime_post,
+ "HDEPEND": buildtime,
"DEPEND": buildtime,
}
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 9da202c62..d228694ba 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -24,7 +24,7 @@ from portage.dep import Atom, best_match_to_list, extract_affecting_use, \
_repo_separator
from portage.dep._slot_operator import ignore_built_slot_operator_deps
from portage.eapi import eapi_has_strong_blocks, eapi_has_required_use, \
- _get_eapi_attrs
+ _get_eapi_attrs, eapi_has_hdepend
from portage.exception import (InvalidAtom, InvalidDependString,
PackageNotFound, PortageException)
from portage.output import colorize, create_color_func, \
@@ -504,7 +504,7 @@ class depgraph(object):
pkg_tree_map = RootConfig.pkg_tree_map
- _dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"]
+ _dep_keys = ["DEPEND", "RDEPEND", "PDEPEND", "HDEPEND"]
def __init__(self, settings, trees, myopts, myparams, spinner,
frozen_config=None, backtrack_parameters=BacktrackParameter(), allow_backtracking=False):
@@ -537,10 +537,6 @@ class depgraph(object):
preload_installed_pkgs = \
"--nodeps" not in self._frozen_config.myopts
- if self._frozen_config.myopts.get("--root-deps") is not None and \
- myroot != self._frozen_config.target_root:
- continue
-
fake_vartree = self._frozen_config.trees[myroot]["vartree"]
if not fake_vartree.dbapi:
# This needs to be called for the first depgraph, but not for
@@ -1685,7 +1681,7 @@ class depgraph(object):
removal_action = "remove" in self._dynamic_config.myparams
edepend={}
- depkeys = ["DEPEND","RDEPEND","PDEPEND"]
+ depkeys = ["DEPEND","RDEPEND","PDEPEND","HDEPEND"]
for k in depkeys:
edepend[k] = metadata[k]
@@ -1713,31 +1709,44 @@ class depgraph(object):
# Removal actions never traverse ignored buildtime
# dependencies, so it's safe to discard them early.
edepend["DEPEND"] = ""
+ edepend["HDEPEND"] = ""
ignore_build_time_deps = True
+ ignore_depend_deps = ignore_build_time_deps
+ ignore_hdepend_deps = ignore_build_time_deps
+
if removal_action:
depend_root = myroot
else:
- depend_root = self._frozen_config._running_root.root
- root_deps = self._frozen_config.myopts.get("--root-deps")
- if root_deps is not None:
- if root_deps is True:
- depend_root = myroot
- elif root_deps == "rdeps":
- ignore_build_time_deps = True
+ if eapi_has_hdepend(pkg.metadata['EAPI']):
+ depend_root = myroot
+ else:
+ depend_root = self._frozen_config._running_root.root
+ root_deps = self._frozen_config.myopts.get("--root-deps")
+ if root_deps is not None:
+ if root_deps is True:
+ depend_root = myroot
+ elif root_deps == "rdeps":
+ ignore_depend_deps = True
# If rebuild mode is not enabled, it's safe to discard ignored
# build-time dependencies. If you want these deps to be traversed
# in "complete" mode then you need to specify --with-bdeps=y.
- if ignore_build_time_deps and \
- not self._rebuild.rebuild:
- edepend["DEPEND"] = ""
+ if not self._rebuild.rebuild:
+ if ignore_depend_deps:
+ edepend["DEPEND"] = ""
+ if ignore_hdepend_deps:
+ edepend["HDEPEND"] = ""
deps = (
(depend_root, edepend["DEPEND"],
self._priority(buildtime=True,
- optional=(pkg.built or ignore_build_time_deps),
- ignored=ignore_build_time_deps)),
+ optional=(pkg.built or ignore_depend_deps),
+ ignored=ignore_depend_deps)),
+ (self._frozen_config._running_root.root, edepend["HDEPEND"],
+ self._priority(buildtime=True,
+ optional=(pkg.built or ignore_hdepend_deps),
+ ignored=ignore_hdepend_deps)),
(myroot, edepend["RDEPEND"],
self._priority(runtime=True)),
(myroot, edepend["PDEPEND"],
@@ -2838,7 +2847,7 @@ class depgraph(object):
return [pkg.slot_atom for pkg in greedy_pkgs]
blockers = {}
- blocker_dep_keys = ["DEPEND", "PDEPEND", "RDEPEND"]
+ blocker_dep_keys = ["DEPEND", "PDEPEND", "RDEPEND", "HDEPEND"]
for pkg in greedy_pkgs + [highest_pkg]:
dep_str = " ".join(pkg.metadata[k] for k in blocker_dep_keys)
try:
@@ -3099,7 +3108,7 @@ class depgraph(object):
if target_atom is not None and isinstance(node, Package):
affecting_use = set()
- for dep_str in "DEPEND", "RDEPEND", "PDEPEND":
+ for dep_str in "DEPEND", "RDEPEND", "PDEPEND", "HDEPEND":
try:
affecting_use.update(extract_affecting_use(
node.metadata[dep_str], target_atom,
@@ -3183,10 +3192,12 @@ class depgraph(object):
dep_strings.add(node.metadata["DEPEND"])
dep_strings.add(node.metadata["RDEPEND"])
dep_strings.add(node.metadata["PDEPEND"])
+ dep_strings.add(node.metadata["HDEPEND"])
else:
for priority in priorities:
if priority.buildtime:
dep_strings.add(node.metadata["DEPEND"])
+ dep_strings.add(node.metadata["HDEPEND"])
if priority.runtime:
dep_strings.add(node.metadata["RDEPEND"])
if priority.runtime_post:
@@ -4129,7 +4140,7 @@ class depgraph(object):
if pkg not in self._dynamic_config.digraph.nodes:
return False
- for key in "DEPEND", "RDEPEND", "PDEPEND", "LICENSE":
+ for key in "DEPEND", "RDEPEND", "PDEPEND", "HDEPEND", "LICENSE":
dep = pkg.metadata[key]
old_val = set(portage.dep.use_reduce(dep, pkg.use.enabled, is_valid_flag=pkg.iuse.is_valid_flag, flat=True))
new_val = set(portage.dep.use_reduce(dep, new_use, is_valid_flag=pkg.iuse.is_valid_flag, flat=True))
diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index d19b7950f..c3e96465d 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -977,7 +977,6 @@ def parse_opts(tmpcmdline, silent=False):
"type" : "choice",
"choices" : true_y_or_n
},
-
}
from optparse import OptionParser