From 9f7da1c7688f48d9a7ac2cf38c7f81cca35f7ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=98=E6=9D=83=20=E9=A9=AC?= Date: Mon, 20 Nov 2023 17:34:44 +0800 Subject: [PATCH] feat: archive --- metagpt/utils/file_repository.py | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/metagpt/utils/file_repository.py b/metagpt/utils/file_repository.py index e69de29bb..af787c70a 100644 --- a/metagpt/utils/file_repository.py +++ b/metagpt/utils/file_repository.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/11/20 +@Author : mashenquan +@File : git_repository.py +@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13. +""" +import json +from pathlib import Path +from typing import Dict, List + +import aiofiles + +from metagpt.utils.git_repository import GitRepository + + +class FileRepository: + def __init__(self, git_repo: GitRepository, relative_path: Path = "."): + self._relative_path = relative_path # Relative path based on the Git repository. + self._git_repo = git_repo + self._dependencies: Dict[str, List[str]] = {} + + async def save(self, filename: Path, content, dependencies: List[str] = None): + path_name = self.workdir / filename + with aiofiles.open(str(path_name), mode="w") as writer: + await writer.write(content) + if dependencies is not None: + await self.update_dependency(filename, dependencies) + + async def update_dependency(self, filename, dependencies: List[str]): + self._dependencies[str(filename)] = dependencies + + async def save_dependency(self): + filename = ".dependencies.json" + path_name = self.workdir / filename + data = json.dumps(self._dependencies) + with aiofiles.open(str(path_name), mode="w") as writer: + await writer.write(data) + + @property + def workdir(self): + return self._git_repo.workdir / self._relative_path