Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions odoo_repository/models/odoo_module_branch.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,9 +307,10 @@ def _get_recursive_dependencies(self, domain=None, _visited=None):
domain = []
if _visited is None:
_visited = set()
if self.id in _visited:
current_ids = set(self.ids)
if current_ids.issubset(_visited):
return self.browse()
_visited.add(self.id)
_visited |= current_ids
# Apply domain and exclude self
dependencies = (self.dependency_ids - self).filtered_domain(domain)
dep_ids = set(dependencies.ids)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,22 @@ def test_get_recursive_dependencies_empty(self):
deps = mod_alone_branch._get_recursive_dependencies()
self.assertEqual(len(deps), 0)

def test_get_recursive_dependencies_multi_record_self(self):
"""Test _get_recursive_dependencies called on a non-singleton recordset."""
# This mirrors odoo.project.import.modules._action_import_missing_dependencies,
# which calls the method on the module_branch_id of several project
# modules at once. The previous implementation relied on `self.id`,
# raising `ValueError: Expected singleton` for more than one record.
self.mod_a_branch.dependency_ids = self.mod_base_branch
self.mod_b_branch.dependency_ids = self.mod_c_branch
modules = self.mod_a_branch + self.mod_b_branch
deps = modules._get_recursive_dependencies()
self.assertIn(self.mod_base_branch, deps)
self.assertIn(self.mod_c_branch, deps)
self.assertNotIn(self.mod_a_branch, deps)
self.assertNotIn(self.mod_b_branch, deps)
self.assertEqual(len(deps), 2) # base, module_c

def test_get_recursive_dependencies_self_exclusion(self):
"""Test that _get_recursive_dependencies excludes self."""
# Create modules
Expand Down
Loading