[entropy.client] add support for recursive/non-recursive pkgs dep matching
This commit is contained in:
+22
-12
@@ -60,6 +60,7 @@ def package(options):
|
||||
e_req_save_here = False
|
||||
e_req_dump = False
|
||||
e_req_bdeps = False
|
||||
e_req_recursive = True
|
||||
e_req_multifetch = 1
|
||||
rc = 0
|
||||
_myopts = []
|
||||
@@ -86,6 +87,8 @@ def package(options):
|
||||
e_req_only_fetch = True
|
||||
elif (opt == "--deep"):
|
||||
e_req_deep = True
|
||||
elif (opt == "--no-recursive"):
|
||||
e_req_recursive = False
|
||||
elif (opt == "--dump"):
|
||||
e_req_dump = True
|
||||
elif (opt == "--listfiles"):
|
||||
@@ -150,7 +153,8 @@ def package(options):
|
||||
deepdeps = e_req_deep, pkgs = my_etp_pkg_paths,
|
||||
savecwd = e_req_save_here,
|
||||
relaxed_deps = e_req_relaxed,
|
||||
build_deps = e_req_bdeps)
|
||||
build_deps = e_req_bdeps,
|
||||
recursive = e_req_recursive)
|
||||
else:
|
||||
print_error(red(" %s." % (_("Nothing to do"),) ))
|
||||
rc = 126
|
||||
@@ -165,7 +169,8 @@ def package(options):
|
||||
multifetch = e_req_multifetch,
|
||||
dochecksum = e_req_checksum,
|
||||
relaxed_deps = e_req_relaxed,
|
||||
build_deps = e_req_bdeps)
|
||||
build_deps = e_req_bdeps,
|
||||
recursive = e_req_recursive)
|
||||
else:
|
||||
print_error(red(" %s." % (_("Nothing to do"),) ))
|
||||
rc = 126
|
||||
@@ -182,7 +187,8 @@ def package(options):
|
||||
multifetch = e_req_multifetch,
|
||||
check_critical_updates = True,
|
||||
relaxed_deps = e_req_relaxed,
|
||||
build_deps = e_req_bdeps)
|
||||
build_deps = e_req_bdeps,
|
||||
recursive = e_req_recursive)
|
||||
else:
|
||||
print_error(red(" %s." % (_("Nothing to do"),) ))
|
||||
rc = 126
|
||||
@@ -831,7 +837,7 @@ def _show_you_meant(entropy_client, package, from_installed):
|
||||
items_cache.add((key, slot))
|
||||
|
||||
def _generate_run_queue(entropy_client, found_pkg_atoms, deps, emptydeps,
|
||||
deepdeps, relaxeddeps, builddeps):
|
||||
deepdeps, relaxeddeps, builddeps, recursive):
|
||||
|
||||
run_queue = []
|
||||
removal_queue = []
|
||||
@@ -841,12 +847,13 @@ def _generate_run_queue(entropy_client, found_pkg_atoms, deps, emptydeps,
|
||||
_("Calculating dependencies"),) )
|
||||
run_queue, removal_queue, status = entropy_client.get_install_queue(
|
||||
found_pkg_atoms, emptydeps, deepdeps, relaxed_deps = relaxeddeps,
|
||||
build_deps = builddeps)
|
||||
build_deps = builddeps, recursive = recursive)
|
||||
if status == -2:
|
||||
print_error(red(" @@ ") + blue("%s: " % (
|
||||
_("Cannot find needed dependencies"),) ))
|
||||
for package in run_queue:
|
||||
_show_masked_pkg_info(entropy_client, package, from_user = False)
|
||||
_show_masked_pkg_info(entropy_client, package,
|
||||
from_user = False)
|
||||
return True, (125, -1), []
|
||||
|
||||
else:
|
||||
@@ -857,7 +864,7 @@ def _generate_run_queue(entropy_client, found_pkg_atoms, deps, emptydeps,
|
||||
|
||||
def _download_sources(entropy_client, packages = None, deps = True,
|
||||
deepdeps = False, pkgs = None, savecwd = False, relaxed_deps = False,
|
||||
build_deps = False):
|
||||
build_deps = False, recursive = True):
|
||||
|
||||
if packages is None:
|
||||
packages = []
|
||||
@@ -877,7 +884,8 @@ def _download_sources(entropy_client, packages = None, deps = True,
|
||||
return myrc
|
||||
|
||||
abort, run_queue, removal_queue = _generate_run_queue(entropy_client,
|
||||
found_pkg_atoms, deps, False, deepdeps, relaxed_deps, build_deps)
|
||||
found_pkg_atoms, deps, False, deepdeps, relaxed_deps, build_deps,
|
||||
recursive)
|
||||
if abort:
|
||||
return run_queue
|
||||
|
||||
@@ -986,7 +994,7 @@ def _fetch_packages(entropy_client, run_queue, downdata, multifetch = 1,
|
||||
|
||||
def _download_packages(entropy_client, packages = None, deps = True,
|
||||
deepdeps = False, multifetch = 1, dochecksum = True, relaxed_deps = False,
|
||||
build_deps = False):
|
||||
build_deps = False, recursive = True):
|
||||
|
||||
if packages is None:
|
||||
packages = []
|
||||
@@ -1012,7 +1020,8 @@ def _download_packages(entropy_client, packages = None, deps = True,
|
||||
return myrc
|
||||
|
||||
abort, run_queue, removal_queue = _generate_run_queue(entropy_client,
|
||||
found_pkg_atoms, deps, False, deepdeps, relaxed_deps, build_deps)
|
||||
found_pkg_atoms, deps, False, deepdeps, relaxed_deps, build_deps,
|
||||
recursive)
|
||||
if abort:
|
||||
return run_queue
|
||||
|
||||
@@ -1041,7 +1050,7 @@ def install_packages(entropy_client,
|
||||
emptydeps = False, onlyfetch = False, deepdeps = False,
|
||||
config_files = False, pkgs = None, resume = False, skipfirst = False,
|
||||
dochecksum = True, multifetch = 1, check_critical_updates = False,
|
||||
relaxed_deps = False, build_deps = False):
|
||||
relaxed_deps = False, build_deps = False, recursive = True):
|
||||
|
||||
if packages is None:
|
||||
packages = []
|
||||
@@ -1097,7 +1106,8 @@ def install_packages(entropy_client,
|
||||
return myrc
|
||||
|
||||
abort, run_queue, removal_queue = _generate_run_queue(entropy_client,
|
||||
found_pkg_atoms, deps, emptydeps, deepdeps, relaxed_deps, build_deps)
|
||||
found_pkg_atoms, deps, emptydeps, deepdeps, relaxed_deps,
|
||||
build_deps, recursive)
|
||||
if abort:
|
||||
return run_queue
|
||||
|
||||
|
||||
@@ -892,8 +892,8 @@ class CalculatorsMixin:
|
||||
conflicts.add(c_idpackage)
|
||||
|
||||
def __generate_dependency_tree_analyze_deplist(self, pkg_match, repo_db,
|
||||
stack, deps_not_found, conflicts, unsat_cache, relaxed_deps, build_deps,
|
||||
deep_deps, empty_deps):
|
||||
stack, deps_not_found, conflicts, unsat_cache, relaxed_deps,
|
||||
build_deps, deep_deps, empty_deps, recursive):
|
||||
|
||||
pkg_id, repo_id = pkg_match
|
||||
# exclude build dependencies
|
||||
@@ -942,8 +942,11 @@ class CalculatorsMixin:
|
||||
# dependency not found !
|
||||
deps_not_found.add(unsat_dep)
|
||||
continue
|
||||
|
||||
deps.add((match_pkg_id, match_repo_id))
|
||||
stack.push((match_pkg_id, match_repo_id))
|
||||
if recursive:
|
||||
# push to stack only if recursive
|
||||
stack.push((match_pkg_id, match_repo_id))
|
||||
|
||||
post_deps_matches = set()
|
||||
for post_dep in post_deps:
|
||||
@@ -953,14 +956,16 @@ class CalculatorsMixin:
|
||||
# not adding to deps_not_found
|
||||
continue
|
||||
post_deps_matches.add((match_pkg_id, match_repo_id))
|
||||
stack.push((match_pkg_id, match_repo_id))
|
||||
if recursive:
|
||||
# push to stack only if recursive
|
||||
stack.push((match_pkg_id, match_repo_id))
|
||||
|
||||
return deps, post_deps_matches
|
||||
|
||||
def _generate_dependency_tree(self, matched_atom, graph,
|
||||
empty_deps = False, relaxed_deps = False, build_deps = False,
|
||||
deep_deps = False, unsatisfied_deps_cache = None,
|
||||
elements_cache = None):
|
||||
elements_cache = None, recursive = True):
|
||||
|
||||
# this cache avoids adding the same element to graph
|
||||
# several times, when it is supposed to be already handled
|
||||
@@ -975,7 +980,6 @@ class CalculatorsMixin:
|
||||
stack = Lifo()
|
||||
stack.push(matched_atom)
|
||||
|
||||
|
||||
while stack.is_filled():
|
||||
|
||||
# get item from stack
|
||||
@@ -1006,8 +1010,8 @@ class CalculatorsMixin:
|
||||
# search inside installed packages repository if there's something
|
||||
# in the same slot, if so, do some extra checks first.
|
||||
pkg_key, pkg_slot = repo_db.retrieveKeySlot(pkg_id)
|
||||
cm_idpackage, cm_result = self._installed_repository.atomMatch(pkg_key,
|
||||
matchSlot = pkg_slot)
|
||||
cm_idpackage, cm_result = self._installed_repository.atomMatch(
|
||||
pkg_key, matchSlot = pkg_slot)
|
||||
|
||||
if cm_idpackage != -1:
|
||||
# this method does:
|
||||
@@ -1020,8 +1024,8 @@ class CalculatorsMixin:
|
||||
dep_matches, post_dep_matches = \
|
||||
self.__generate_dependency_tree_analyze_deplist(
|
||||
pkg_match, repo_db, stack, deps_not_found,
|
||||
conflicts, unsatisfied_deps_cache,
|
||||
relaxed_deps, build_deps, deep_deps, empty_deps)
|
||||
conflicts, unsatisfied_deps_cache, relaxed_deps,
|
||||
build_deps, deep_deps, empty_deps, recursive)
|
||||
|
||||
# eventually add our package match to depgraph
|
||||
graph.add(pkg_match, dep_matches)
|
||||
@@ -1321,16 +1325,17 @@ class CalculatorsMixin:
|
||||
|
||||
def get_required_packages(self, matched_atoms, empty_deps = False,
|
||||
deep_deps = False, relaxed_deps = False, build_deps = False,
|
||||
quiet = False):
|
||||
quiet = False, recursive = True):
|
||||
|
||||
c_hash = "%s%s" % (
|
||||
EntropyCacher.CACHE_IDS['dep_tree'],
|
||||
hash("%s|%s|%s|%s|%s|%s|%s" % (
|
||||
hash("%s|%s|%s|%s|%s|%s|%s|%s" % (
|
||||
hash(frozenset(sorted(matched_atoms))),
|
||||
empty_deps,
|
||||
deep_deps,
|
||||
relaxed_deps,
|
||||
build_deps,
|
||||
recursive,
|
||||
self._installed_repository.checksum(),
|
||||
# needed when users do bogus things like editing config files
|
||||
# manually (branch setting)
|
||||
@@ -1384,7 +1389,8 @@ class CalculatorsMixin:
|
||||
matched_atom, graph, empty_deps = empty_deps,
|
||||
deep_deps = deep_deps, relaxed_deps = relaxed_deps,
|
||||
build_deps = build_deps, elements_cache = elements_cache,
|
||||
unsatisfied_deps_cache = unsat_deps_cache
|
||||
unsatisfied_deps_cache = unsat_deps_cache,
|
||||
recursive = recursive
|
||||
)
|
||||
except DependenciesNotFound as err:
|
||||
error_generated = -2
|
||||
@@ -1884,14 +1890,15 @@ class CalculatorsMixin:
|
||||
return queue
|
||||
|
||||
def get_install_queue(self, matched_atoms, empty_deps, deep_deps,
|
||||
relaxed_deps = False, build_deps = False, quiet = False):
|
||||
relaxed_deps = False, build_deps = False, quiet = False,
|
||||
recursive = True):
|
||||
|
||||
install = []
|
||||
removal = []
|
||||
treepackages, result = self.get_required_packages(matched_atoms,
|
||||
empty_deps = empty_deps, deep_deps = deep_deps,
|
||||
relaxed_deps = relaxed_deps, build_deps = build_deps,
|
||||
quiet = quiet)
|
||||
quiet = quiet, recursive = recursive)
|
||||
|
||||
if result == -2:
|
||||
return treepackages, removal, result
|
||||
|
||||
Reference in New Issue
Block a user