diff options
| -rw-r--r-- | src/ipm/api.py | 9 | ||||
| -rw-r--r-- | src/ipm/models/index.py | 13 |
2 files changed, 15 insertions, 7 deletions
diff --git a/src/ipm/api.py b/src/ipm/api.py index 12104ac..490344c 100644 --- a/src/ipm/api.py +++ b/src/ipm/api.py @@ -2,7 +2,7 @@ from pathlib import Path from .typing import StrPath from .utils import freeze, urlparser, loader from .exceptions import FileTypeMismatch, TomlLoadFailed, FileNotFoundError -from .const import INDEX, STORAGE, SRC_HOME +from .const import INDEX, INDEX_PATH, STORAGE, SRC_HOME from .logging import info, success, warning, error from .models.ipk import InfiniProject, InfiniFrozenPackage from .models.lock import PackageLock @@ -76,9 +76,12 @@ def install(uri: str, index: str = "", echo: bool = False) -> None: if uri.isalpha(): yggdrasil = Yggdrasil(index) - if not lock.get_index(index): + + if not (lock_index := lock.get_index(index)): yggdrasil.sync() lock.add_index(index, yggdrasil.host, yggdrasil.uuid, dump=True) + else: + yggdrasil.init(INDEX_PATH / lock_index["uuid"]) if not (remote_ifp := yggdrasil.get(uri)): # TODO 特定版本的捕获 return warning(f"未能在世界树[{yggdrasil.index}]中搜寻到规则包[{uri}].", echo) @@ -86,7 +89,7 @@ def install(uri: str, index: str = "", echo: bool = False) -> None: ifp = loader.load_from_remote( uri, baseurl=index + remote_ifp["name"], - filename=remote_ifp["storage"], + filename=remote_ifp["source"], echo=echo, ) elif urlparser.is_valid_url(uri): diff --git a/src/ipm/models/index.py b/src/ipm/models/index.py index 2dc529e..743a42b 100644 --- a/src/ipm/models/index.py +++ b/src/ipm/models/index.py @@ -22,6 +22,12 @@ class Yggdrasil: INDEX_PATH.mkdir(parents=True, exist_ok=True) self.index = index.rstrip("/") + "/" + def init(self, source_path: Path): + self.source_path = source_path + self.lock = PackageLock(self.source_path / "infini.lock") + self.uuid = self.lock.metadata["uuid"] + self.host = self.lock.metadata.get("host") or urlparse(self.index).netloc + def sync(self, echo: bool = False): # TODO 输出内容 lock_bytes = requests.get(self.index + "infini.lock").content @@ -39,13 +45,12 @@ class Yggdrasil: temp_dir.cleanup() raise LockLoadFailed(f"地址[{self.index}]不是合法的世界树服务器.") - self.uuid = temp_lock.metadata["uuid"] - self.host = temp_lock.metadata.get("host") or urlparse(self.index).netloc self.source_path = INDEX_PATH / self.uuid - self.source_path.mkdir(parents=True, exist_ok=True) + shutil.copy2(temp_lock_path, self.source_path) - self.lock = PackageLock(self.source_path / "infini.lock") + temp_dir.cleanup() + self.init(self.source_path) def get(self, name: str, version: str | None = None) -> Storage | None: return self.lock.get_particular_storage(name, version) |
