From 16d1bd06455f506df84340432b54e1a1d2e9e940 Mon Sep 17 00:00:00 2001 From: 苏向夜 Date: Sun, 21 Jan 2024 18:06:56 +0800 Subject: :fix: fix(lock): fix lock error occured in file io --- src/ipm/api.py | 2 +- src/ipm/models/lock.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/ipm/api.py b/src/ipm/api.py index 3853faa..47f83d2 100644 --- a/src/ipm/api.py +++ b/src/ipm/api.py @@ -97,7 +97,7 @@ def install(uri: str, index: str = "", echo: bool = False) -> None: raise # TODO info(f"开始安装[{temp_ipk.name}]中...", echo) - ipk = extract(STORAGE / temp_ipk.source_path, SRC_HOME, echo) + ipk = extract(STORAGE / temp_ipk.name / temp_ipk.default_name, SRC_HOME, echo) info("正在处理全局包锁...") lock.add(ipk, dump=True) info("全局锁已处理完毕.") diff --git a/src/ipm/models/lock.py b/src/ipm/models/lock.py index 78f4921..9d474a8 100644 --- a/src/ipm/models/lock.py +++ b/src/ipm/models/lock.py @@ -20,17 +20,28 @@ class IpmLock(metaclass=ABCMeta): def load(self): if not self.source_path.exists(): - self.source_path.write_text(ATTENSION) + self.metadata = {} self.packages = {} + source_file = self.source_path.open("w", encoding="utf-8") + source_file.write(ATTENSION + str(self.dumps())) + source_file.close() else: loaded_data = toml.load(self.source_path.open("r", encoding="utf-8")) - self.packages = loaded_data["package"] + self.metadata = ( + loaded_data["metadata"] if "metadata" in loaded_data.keys() else {} + ) + self.packages = ( + loaded_data["package"] if "package" in loaded_data.keys() else [] + ) def dumps(self) -> dict: return {"metadata": self.metadata, "packages": self.packages} def dump(self) -> str: - return toml.dump(self.source_path.open("w+", encoding="utf-8")) + data_to_dump = ATTENSION + toml.dumps(self.dumps()) + source_file = self.source_path.open("w", encoding="utf-8") + source_file.write(data_to_dump) + source_file.close() class PackageLock(IpmLock): -- cgit v1.2.3-70-g09d2