[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": {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.