aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2024-01-22 17:40:02 +0800
committer苏向夜 <fu050409@163.com>2024-01-22 17:40:02 +0800
commitdc8f25d26d7a17d9d71c7a06e945766dd647458f (patch)
tree978d2e2d511dcf4e548c9c64096c73f6c383b4ae
parent37bbb761e05a644f670eb2da721b398f96bb587c (diff)
downloadipm-dc8f25d26d7a17d9d71c7a06e945766dd647458f.tar.gz
ipm-dc8f25d26d7a17d9d71c7a06e945766dd647458f.zip
:bug: fix(index): fix index handler error
-rw-r--r--src/ipm/api.py9
-rw-r--r--src/ipm/models/index.py13
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)