|
7 | 7 | import atexit |
8 | 8 | import contextlib |
9 | 9 | import functools |
| 10 | +import gc |
10 | 11 | import json |
11 | 12 | import logging |
12 | 13 | import os |
@@ -343,7 +344,7 @@ def args(self, value: DbtConfiguration | dict[str, t.Any]) -> None: # pyright: |
343 | 344 | if isinstance(value, dict): |
344 | 345 | value = dc_replace(self._args, **value) |
345 | 346 | set_from_args(value, None) # pyright: ignore[reportArgumentType] |
346 | | - self.parse_project(reparse_configuration=True) |
| 347 | + self.parse_project(write_manifest=True, reparse_configuration=True) |
347 | 348 | self._args = value |
348 | 349 |
|
349 | 350 | def set_args(self, **kwargs: t.Any) -> None: |
@@ -500,17 +501,18 @@ def parse_project( |
500 | 501 | self.__manifest_loader.build_manifest_state_check() |
501 | 502 | ) |
502 | 503 | self._manifest = self.__manifest_loader.saved_manifest = self.__manifest_loader.load() |
503 | | - self._manifest.build_flat_graph() |
504 | | - self._manifest.build_parent_and_child_maps() |
505 | | - self._manifest.build_group_map() |
| 504 | + if not self.__manifest_loader.skip_parsing: |
| 505 | + self._manifest.build_flat_graph() |
| 506 | + self._manifest.build_group_map() |
506 | 507 |
|
507 | 508 | self._sql_parser = None |
508 | 509 | self._macro_parser = None |
509 | 510 |
|
510 | 511 | self.__manifest_loader.save_macros_to_adapter(self.adapter) |
511 | 512 | self.__compilation_cache.clear() |
512 | 513 |
|
513 | | - if write_manifest: |
| 514 | + _ = gc.collect() |
| 515 | + if write_manifest and not self.__manifest_loader.skip_parsing: |
514 | 516 | self.write_manifest() |
515 | 517 |
|
516 | 518 | logger.info(f"Parsed project: {self.project_name}") |
@@ -684,7 +686,7 @@ def relation_exists(self, database: str, schema: str, name: str) -> bool: |
684 | 686 | def write_manifest(self, path: Path | str | None = None) -> None: |
685 | 687 | """Write manifest to disk.""" |
686 | 688 | if path is None: |
687 | | - path = self.project_root / "target" / "manifest.json" |
| 689 | + path = self.target_path / "manifest.json" |
688 | 690 | else: |
689 | 691 | path = Path(path) |
690 | 692 | if not path.is_absolute(): |
@@ -1006,6 +1008,8 @@ def inject_deferred_state(self, state_path: Path | str) -> None: |
1006 | 1008 | logger.warning(f"No manifest found in previous state at {state_path}") |
1007 | 1009 | return |
1008 | 1010 | self.manifest.merge_from_artifact(previous_state.manifest) |
| 1011 | + del previous_state |
| 1012 | + _ = gc.collect() |
1009 | 1013 |
|
1010 | 1014 | def clear_deferred_state(self) -> None: |
1011 | 1015 | """Clear the deferred state from the manifest.""" |
|
0 commit comments