diff options
author | Ambroz Bizjak <ambrop7@gmail.com> | 2012-09-24 13:13:46 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-09-24 13:13:46 -0700 |
commit | 814e82f24afc221eee72f2b53a3fb7587605cbf9 (patch) | |
tree | abfd103526de9dfb1373d7cc3b3b499af53ace96 /pym/_emerge | |
parent | c4703d79878e4e0eb8e2b36e49c0bdee835b847e (diff) | |
download | portage-814e82f24afc221eee72f2b53a3fb7587605cbf9.tar.gz portage-814e82f24afc221eee72f2b53a3fb7587605cbf9.tar.bz2 portage-814e82f24afc221eee72f2b53a3fb7587605cbf9.zip |
Add experimental EAPI 5-hdepend support.
Diffstat (limited to 'pym/_emerge')
-rw-r--r-- | pym/_emerge/FakeVartree.py | 6 | ||||
-rw-r--r-- | pym/_emerge/Package.py | 4 | ||||
-rw-r--r-- | pym/_emerge/actions.py | 3 | ||||
-rw-r--r-- | pym/_emerge/depgraph.py | 55 | ||||
-rw-r--r-- | pym/_emerge/main.py | 1 |
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 |