diff --git a/sqlmesh/dbt/loader.py b/sqlmesh/dbt/loader.py index 3d63219004..0882c5ad99 100644 --- a/sqlmesh/dbt/loader.py +++ b/sqlmesh/dbt/loader.py @@ -293,17 +293,25 @@ def _load_environment_statements(self, macros: MacroRegistry) -> t.List[Environm ) ] - def _compute_yaml_max_mtime_per_subfolder(self, root: Path) -> t.Dict[Path, float]: - if not root.is_dir(): + def _compute_yaml_max_mtime_per_subfolder( + self, root: Path, visited: t.Optional[t.Set[Path]] = None + ) -> t.Dict[Path, float]: + root = root.resolve() + visited = visited or set() + if not root.is_dir() or root in visited: return {} + visited.add(root) + result = {} max_mtime: t.Optional[float] = None for nested in root.iterdir(): try: if nested.is_dir(): - result.update(self._compute_yaml_max_mtime_per_subfolder(nested)) + result.update( + self._compute_yaml_max_mtime_per_subfolder(nested, visited=visited) + ) elif nested.suffix.lower() in (".yaml", ".yml"): yaml_mtime = self._path_mtimes.get(nested) if yaml_mtime: