diff --git a/vinca/distro.py b/vinca/distro.py index b6e54dd..a858285 100644 --- a/vinca/distro.py +++ b/vinca/distro.py @@ -156,6 +156,12 @@ def get_depends( return set() ignore_pkgs = set(ignore_pkgs or ()) + + if self.snapshot: + dependencies = self._get_snapshot_recursive_depends(pkg, ignore_pkgs) + self._depends_cache[cache_key] = set(dependencies) + return dependencies + dependencies = set() visited = {pkg} packages_to_check = {pkg} @@ -182,11 +188,6 @@ def _get_direct_depends(self, pkg: str) -> set[str]: if pkg in self._direct_depends_cache: return set(self._direct_depends_cache[pkg]) - if self.snapshot: - dependencies = self._get_snapshot_recursive_depends(pkg, ignore_pkgs) - self._depends_cache[cache_key] = set(dependencies) - return dependencies - # if pkg comes from additional_packages_snapshot, extract from its package.xml if ( self.additional_packages_snapshot diff --git a/vinca/test_distro_dependencies.py b/vinca/test_distro_dependencies.py index 6f0c851..d24f9b0 100644 --- a/vinca/test_distro_dependencies.py +++ b/vinca/test_distro_dependencies.py @@ -14,6 +14,7 @@ def test_dependency_walk_reuses_direct_dependencies_across_roots(): distro = Distro.__new__(Distro) distro._depends_cache = {} distro._direct_depends_cache = {} + distro.snapshot = None distro.additional_packages_snapshot = None distro.check_package = lambda name: name in graph distro._walker = Mock() @@ -41,6 +42,7 @@ def test_dependency_walk_honors_ignored_packages(): distro = Distro.__new__(Distro) distro._depends_cache = {} distro._direct_depends_cache = {} + distro.snapshot = None distro.additional_packages_snapshot = None distro.check_package = lambda name: name in graph distro._walker = Mock() @@ -58,6 +60,7 @@ def test_dependency_walk_excludes_root_in_cycles(): distro = Distro.__new__(Distro) distro._depends_cache = {} distro._direct_depends_cache = {} + distro.snapshot = None distro.additional_packages_snapshot = None distro.check_package = lambda name: name in graph distro._get_direct_depends = lambda name: graph[name] @@ -69,6 +72,7 @@ def test_dependency_walk_excludes_root_from_self_dependency(): distro = Distro.__new__(Distro) distro._depends_cache = {} distro._direct_depends_cache = {} + distro.snapshot = None distro.additional_packages_snapshot = None distro.check_package = lambda name: name == "a" distro._get_direct_depends = lambda name: {"a"} @@ -81,6 +85,7 @@ def test_dependency_walk_excludes_root_from_longer_cycle(): distro = Distro.__new__(Distro) distro._depends_cache = {} distro._direct_depends_cache = {} + distro.snapshot = None distro.additional_packages_snapshot = None distro.check_package = lambda name: name in graph distro._get_direct_depends = lambda name: graph[name] diff --git a/vinca/test_snapshot_metadata.py b/vinca/test_snapshot_metadata.py index 3f115b8..ac52770 100644 --- a/vinca/test_snapshot_metadata.py +++ b/vinca/test_snapshot_metadata.py @@ -49,6 +49,7 @@ def make_snapshot_distro(monkeypatch): distro._distribution_type = "ros2" distro._additional_xml_cache = {} distro._depends_cache = {} + distro._direct_depends_cache = {} distro._distro = Mock() distro._distro.get_release_package_xml.return_value = LIVE_PACKAGE_XML distro._walker = Mock() @@ -145,11 +146,16 @@ def test_empty_snapshot_keeps_live_rosdistro_behavior(): distro.additional_packages_snapshot = None distro.build_packages = set() distro._depends_cache = {} + distro._direct_depends_cache = {} distro._distro = Mock() distro._distro.release_packages = {"live_package": Mock()} distro._distro.get_release_package_xml.return_value = LIVE_PACKAGE_XML distro._walker = Mock() - distro._walker.get_recursive_depends.return_value = {"live_dependency"} + distro._walker.get_depends.side_effect = ( + lambda package, dependency_type, ros_packages_only: ( + {"live_dependency"} if dependency_type == "run" else set() + ) + ) assert distro.check_package("live_package") assert distro.get_release_package_xml("live_package") == LIVE_PACKAGE_XML