[sdk/kde-builder] /: refactor: Split reading kde dependencies and building graph
Andrew Shark <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 25439c513225d4437c06cdd7aa849bd68ef19e20 by Andrew Shark.
Committed on 18/08/2026 at 23:27.
Pushed by ashark into branch 'master'.
refactor: Split reading kde dependencies and building graph
M +20 -15 kde_builder/application.py
M +1 -7 kde_builder/dependency_resolver.py
M +0 -3 tests/integration/test_bug-394497-ignore-dep-module.py
M +0 -3 tests/integration/test_cmdline-no-include-dependencies.py
https://invent.kde.org/sdk/kde-builder/-/commit/25439c513225d4437c06cdd7aa849bd68ef19e20
diff --git a/kde_builder/application.py b/kde_builder/application.py
index 6b384759..3766e891 100644
--- a/kde_builder/application.py
+++ b/kde_builder/application.py
@@ -287,6 +287,8 @@ class Application:
branch_group = ctx.get_option("branch-group")
self._warn_if_branch_group_does_not_exists(branch_group)
+ self.dependency_resolver = DependencyResolver(self.module_resolver)
+ self._read_kde_dependencies()
self._resolve_module_dependency_graph(modules)
if "dependency-tree" in cmdline_global_options or "dependency-tree-fullpath" in cmdline_global_options:
@@ -418,18 +420,9 @@ class Application:
logger_app.error(msg)
exit()
- def _resolve_module_dependency_graph(self, modules: list[Module]) -> None:
- """
- Construct a graph of Modules according to the KDE project database dependency information.
-
- The sysadmin/repo-metadata repository must have already been updated, and the
- module factory must be setup. The modules for which to calculate the graph
- must be passed in as arguments
- """
+ def _read_kde_dependencies(self) -> None:
ctx = self.context
metadata_module = ctx.metadata_module
-
- self.dependency_resolver = DependencyResolver(self.module_resolver)
dependency_resolver = self.dependency_resolver
branch_group = ctx.get_option("branch-group")
@@ -440,13 +433,25 @@ class Application:
dependency_file = f"{srcdir}/kde-dependencies/kde-dependencies-{branch_group}"
try:
- dependencies = open(dependency_file, "r")
- logger_app.debug(f" -- Reading dependencies from {dependency_file}")
- dependency_resolver.read_dependency_data(dependencies)
- dependencies.close()
+ with open(dependency_file, "r") as dependencies:
+ logger_app.debug(f" -- Reading dependencies from {dependency_file}")
+ dependency_resolver.read_dependency_data(dependencies)
+ except FileNotFoundError as e:
+ e = str(e).replace("[", "").replace("]", "")
+ logger_app.warning(" r[b[*] Unable to read kde-dependencies:")
+ logger_app.warning(f" r[b[*] {e}")
+ logger_app.warning(" r[b[*] Will attempt to continue.")
- dependency_resolver.resolve_to_module_graph(modules)
+ dependency_resolver.dependencies_of.clear()
+
+ def _resolve_module_dependency_graph(self, modules: list[Module]) -> None:
+ """
+ Construct a graph of Modules according to the KDE project database dependency information.
+ """
+ dependency_resolver = self.dependency_resolver
+ try:
+ dependency_resolver.resolve_to_module_graph(modules)
except Exception as e:
e = str(e).replace("[", "").replace("]", "")
logger_app.warning(" r[b[*] Problems encountered trying to determine correct project graph:")
diff --git a/kde_builder/dependency_resolver.py b/kde_builder/dependency_resolver.py
index 3a2f1065..a5ac355d 100644
--- a/kde_builder/dependency_resolver.py
+++ b/kde_builder/dependency_resolver.py
@@ -30,12 +30,6 @@ class DependencyResolver:
def __init__(self, module_resolver: ModuleResolver):
self.dependencies_of = {}
- """
- Dict mapping short module names (m) to a dict key by branch name, the value of which is yet another dict (see read_dependency_data()).
- Note that this assumes KDE git infrastructure ensures that all full module names (e.g. kde/workspace/plasma-workspace) map to a *unique*
- short name (e.g. plasma-workspace) by stripping leading path components dict mapping a wildcarded module name with no branch to a
- list of module:branch dependencies.
- """
self.module_resolver = module_resolver
"""
@@ -60,7 +54,7 @@ class DependencyResolver:
name = re.sub(r"^.*/", "", name) # Uses greedy capture by default
return name
- def _add_dependency(self, dep_name: str, dep_branch: str, src_name: str, src_branch: str, dep_key: str | None = "+") -> None:
+ def _add_dependency(self, dep_name: str, dep_branch: str, src_name: str, src_branch: str, dep_key: str = "+") -> None:
"""
Add an edge in the dependency graph from ``dep_name`` (at the given branch) to ``src_name`` (at its respective branch).
diff --git a/tests/integration/test_bug-394497-ignore-dep-module.py b/tests/integration/test_bug-394497-ignore-dep-module.py
index a289f192..40484431 100644
--- a/tests/integration/test_bug-394497-ignore-dep-module.py
+++ b/tests/integration/test_bug-394497-ignore-dep-module.py
@@ -7,7 +7,6 @@ import pytest
from kde_builder.application import Application
from kde_builder.debug import Debug
-from kde_builder.dependency_resolver import DependencyResolver
@pytest.fixture
@@ -17,8 +16,6 @@ def mock_app_res_mod_dep_graph(monkeypatch):
Redefine :meth:`Application._resolveModuleDependencies` to avoid requiring metadata module.
"""
new_module = self.module_resolver.resolve_module_if_present("setmod2")
-
- self.dependency_resolver = DependencyResolver(self.module_resolver)
graph = self.dependency_resolver.dependency_graph
# Construct graph manually based on real module list
diff --git a/tests/integration/test_cmdline-no-include-dependencies.py b/tests/integration/test_cmdline-no-include-dependencies.py
index 3c8f0aa6..63a935f6 100644
--- a/tests/integration/test_cmdline-no-include-dependencies.py
+++ b/tests/integration/test_cmdline-no-include-dependencies.py
@@ -7,7 +7,6 @@ import pytest
from kde_builder.application import Application
from kde_builder.debug import Debug
-from kde_builder.dependency_resolver import DependencyResolver
@pytest.fixture
@@ -15,8 +14,6 @@ def mock_application(monkeypatch):
# Redefine Application._resolveModuleDependencies to avoid requiring metadata module.
def mock_resolve_module_dependency_graph(self, modules: list):
new_module = self.module_resolver.resolve_module_if_present("setmod2")
-
- self.dependency_resolver = DependencyResolver(self.module_resolver)
self.dependency_resolver.dependency_graph = {
"setmod1": {
"votes": {