[entropy.client] add support for recursive/non-recursive pkgs dep matching

This commit is contained in:
Fabio Erculiani
2010-02-02 16:32:37 +01:00
parent 455af9afd7
commit 5ede4afc4e
2 changed files with 44 additions and 27 deletions
+22 -12
View File
@@ -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
+22 -15
View File
@@ -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