aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2024-01-23 11:46:30 +0800
committer苏向夜 <fu050409@163.com>2024-01-23 11:46:30 +0800
commit6355973a3aa847b43ed1b8e8e2347c61c245a41f (patch)
treed555b3f400c26a378e19c58fb2bcb7ed5a8c925f
parent09e28ce5d22c9a76c4240325e67c17455a1023f7 (diff)
downloadipm-6355973a3aa847b43ed1b8e8e2347c61c245a41f.tar.gz
ipm-6355973a3aa847b43ed1b8e8e2347c61c245a41f.zip
:sparkles: feat(api): new require, unrequire and add remove method
-rw-r--r--src/ipm/api.py72
1 files changed, 71 insertions, 1 deletions
diff --git a/src/ipm/api.py b/src/ipm/api.py
index 9c514e0..7e0eda1 100644
--- a/src/ipm/api.py
+++ b/src/ipm/api.py
@@ -11,7 +11,7 @@ from .exceptions import (
)
from .utils.version import require_update
from .models.ipk import InfiniProject, InfiniFrozenPackage
-from .models.lock import PackageLock
+from .models.lock import PackageLock, ProjectLock
from .models.index import Yggdrasil
import toml
@@ -186,3 +186,73 @@ def uninstall(name: str, confirm: bool = False, echo: bool = False) -> None:
lock.remove_package(name, dump=True)
success(f"规则包[{name}]卸载完成!", echo)
+
+
+def require(name: str, index: str = "", echo: bool = False) -> None:
+ # TODO 输出
+ pkg_lock = PackageLock()
+ lock = ProjectLock()
+ ipk = InfiniProject()
+ splited_name = name.split("==") # TODO 支持 >= <= > < 标识
+ name = splited_name[0]
+
+ if len(splited_name) > 1:
+ version = splited_name[1]
+ else:
+ version = None
+
+ if not pkg_lock.has_package(name):
+ install(
+ f"name=={version}" if version else name,
+ index=index,
+ upgrade=True,
+ force=True,
+ echo=True,
+ )
+
+ ipk.require(name, version, dump=True)
+ lock.require(name, version, dump=True)
+
+
+def unrequire(name: str):
+ # TODO 输出
+ ipk = InfiniProject()
+ lock = ProjectLock()
+
+ ipk.unrequire(name, dump=True)
+ lock.unrequire(name, dump=True)
+
+
+def add(name: str, index: str = "", echo: bool = False) -> None:
+ # TODO 输出
+ pkg_lock = PackageLock()
+ lock = ProjectLock()
+ ipk = InfiniProject()
+ splited_name = name.split("==") # TODO 支持 >= <= > < 标识
+ name = splited_name[0]
+
+ if len(splited_name) > 1:
+ version = splited_name[1]
+ else:
+ version = None
+
+ if not pkg_lock.has_package(name):
+ install(
+ f"name=={version}" if version else name,
+ index=index,
+ upgrade=True,
+ force=True,
+ echo=True,
+ )
+
+ ipk.add(name, version, dump=True)
+ lock.add(name, version, dump=True)
+
+
+def remove(name: str):
+ # TODO 输出
+ ipk = InfiniProject()
+ lock = ProjectLock()
+
+ ipk.remove(name, dump=True)
+ lock.remove(name, dump=True)