diff --git a/metagpt/roles/engineer.py b/metagpt/roles/engineer.py index e05e69cbb8..b2a909400c 100644 --- a/metagpt/roles/engineer.py +++ b/metagpt/roles/engineer.py @@ -204,7 +204,8 @@ async def _is_pass(self, summary) -> (str, str): async def _think(self) -> Action | None: if not CONFIG.src_workspace: - CONFIG.src_workspace = CONFIG.git_repo.workdir / CONFIG.git_repo.workdir.name + project_name = CONFIG.project_name or CONFIG.git_repo.workdir.name + CONFIG.src_workspace = CONFIG.git_repo.workdir / project_name write_code_filters = any_to_str_set([WriteTasks, SummarizeCode, FixBug]) summarize_code_filters = any_to_str_set([WriteCode, WriteCodeReview]) if not self.rc.news: diff --git a/metagpt/utils/git_repository.py b/metagpt/utils/git_repository.py index e9855df05a..4feed89d57 100644 --- a/metagpt/utils/git_repository.py +++ b/metagpt/utils/git_repository.py @@ -199,10 +199,17 @@ def rename_root(self, new_dir_name): if new_path.exists(): logger.info(f"Delete directory {str(new_path)}") shutil.rmtree(new_path) + if new_path.exists(): # Recheck for windows os + logger.warning(f"Failed to delete directory {str(new_path)}") + return try: shutil.move(src=str(self.workdir), dst=str(new_path)) except Exception as e: logger.warning(f"Move {str(self.workdir)} to {str(new_path)} error: {e}") + finally: + if not new_path.exists(): # Recheck for windows os + logger.warning(f"Failed to move {str(self.workdir)} to {str(new_path)}") + return logger.info(f"Rename directory {str(self.workdir)} to {str(new_path)}") self._repository = Repo(new_path) self._gitignore_rules = parse_gitignore(full_path=str(new_path / ".gitignore"))