cmds.projects.lib.pkg_relations(): Use walk_project_deps()
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m59s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m46s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 5m5s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 4m32s
CI / Packaging test (push) Successful in 0s
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m59s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m46s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 5m5s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 4m32s
CI / Packaging test (push) Successful in 0s
pkg_relations() walks the [pkg.<rel>.jw] edges with its own queue, duplicating the walk that App.walk_project_deps() extracted from App.__get_project_refs() in the previous commit. Port it onto the shared walk: for each flavour, the walk computes the closure of the seed packages (with the installed-package check off, the ignore set as exclude, and recursion per the recursive flag), and the function then emits the constraint strings of the edges of the visited projects. The relation sets are unchanged. The order of recursive output follows the walk (postorder) instead of the old breadth-first order; non-recursive callers, such as the spec generation and the PREREQ_* queries, print byte-identical output. The dont_expand_version_macros condition now tests membership in the visited set instead of the old queue, which only matters when the flag is passed manually. Verified over all projects of the dev tree: pkg-requires, pkg-recommends, pkg-conflicts and the skip-excluded, names-only and debian variants are byte-identical for the non-recursive forms and set-identical for the recursive ones. Assisted-by: unsloth/Qwen3.8-27B-GGUF:Q4_K_M with pi.dev v0.86.1 Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
c6d6987e54
commit
5eccef847d
1 changed files with 45 additions and 40 deletions
|
|
@ -52,47 +52,52 @@ def pkg_relations(
|
|||
|
||||
ret: list[str] = []
|
||||
for flavour in flavours: # build / release / run / devel
|
||||
cur_pkgs = seed_pkgs.copy()
|
||||
visited_pkgs: set[str] = set()
|
||||
while len(cur_pkgs):
|
||||
cur_pkg = cur_pkgs.pop(0)
|
||||
if cur_pkg in visited_pkgs or cur_pkg in ignore:
|
||||
continue
|
||||
closure: list[str] = []
|
||||
visited: set[str] = set()
|
||||
for seed in seed_pkgs:
|
||||
app.walk_project_deps(
|
||||
closure,
|
||||
visited,
|
||||
seed,
|
||||
['pkg.' + rel_type + '.jw'],
|
||||
flavour,
|
||||
add_self = True,
|
||||
scope = Scope.Subtree,
|
||||
names_only = True,
|
||||
check_installed = False,
|
||||
exclude = ignore,
|
||||
recurse = recursive,
|
||||
)
|
||||
for cur_pkg in closure:
|
||||
for subsec in subsections:
|
||||
section = 'pkg.' + rel_type + '.' + subsec
|
||||
visited_pkgs.add(cur_pkg)
|
||||
deps_spec = app.get_value(cur_pkg, section, flavour)
|
||||
if not deps_spec:
|
||||
continue
|
||||
for dep in Dependency.parse_deps_spec(
|
||||
deps_spec,
|
||||
lookup_version = app.get_version,
|
||||
dependent_package = cur_pkg,
|
||||
):
|
||||
dep_name = dep.base_name
|
||||
if dep_name in ignore or dep.full_name in ignore:
|
||||
continue
|
||||
if subsec == 'jw':
|
||||
if (recursive and dep_name not in visited_pkgs
|
||||
and dep_name not in cur_pkgs):
|
||||
cur_pkgs.append(dep_name)
|
||||
if hide_jw_pkg and dep_name == 'jw-pkg':
|
||||
for deps_spec in app.read_dep_edges(cur_pkg, [section], flavour):
|
||||
for dep in Dependency.parse_deps_spec(
|
||||
deps_spec,
|
||||
lookup_version = app.get_version,
|
||||
dependent_package = cur_pkg,
|
||||
):
|
||||
dep_name = dep.base_name
|
||||
if dep_name in ignore or dep.full_name in ignore:
|
||||
continue
|
||||
expand_version_macros = subsec == 'jw'
|
||||
if dont_expand_version_macros and dep_name in cur_pkgs:
|
||||
expand_version_macros = False
|
||||
if hide_self and dep_name in seed_pkgs:
|
||||
continue
|
||||
dep_str = dep.constraint_str(
|
||||
untemplated = expand_version_macros,
|
||||
include_revision = dont_strip_revision,
|
||||
as_range = expand_semver_revision_range,
|
||||
no_subpackages = no_subpackages,
|
||||
syntax = syntax,
|
||||
quote = '"' if quote else None,
|
||||
)
|
||||
if dep_str in ret:
|
||||
continue
|
||||
log(DEBUG, f'Appending dependency >{dep_str}<')
|
||||
ret.append(dep_str)
|
||||
if subsec == 'jw':
|
||||
if hide_jw_pkg and dep_name == 'jw-pkg':
|
||||
continue
|
||||
expand_version_macros = subsec == 'jw'
|
||||
if dont_expand_version_macros and dep_name in visited:
|
||||
expand_version_macros = False
|
||||
if hide_self and dep_name in seed_pkgs:
|
||||
continue
|
||||
dep_str = dep.constraint_str(
|
||||
untemplated = expand_version_macros,
|
||||
include_revision = dont_strip_revision,
|
||||
as_range = expand_semver_revision_range,
|
||||
no_subpackages = no_subpackages,
|
||||
syntax = syntax,
|
||||
quote = '"' if quote else None,
|
||||
)
|
||||
if dep_str in ret:
|
||||
continue
|
||||
log(DEBUG, f'Appending dependency >{dep_str}<')
|
||||
ret.append(dep_str)
|
||||
return ret
|
||||
|
|
|
|||
Loading…
Reference in a new issue