mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-11-02 05:17:23 +08:00
fix(cli): move dev updates out of ordinary startup
This commit is contained in:
@@ -3799,6 +3799,7 @@ def _ensure_git_clean() -> None:
|
||||
|
||||
|
||||
def _update_backend_ref(ref: str, *, fetch: bool = True) -> str:
|
||||
"""同步后端 Git 引用;分支快进到远端,离线标签不访问网络。"""
|
||||
if not (ROOT / ".git").exists():
|
||||
raise RuntimeError("当前目录不是 Git 仓库,无法更新后端代码。")
|
||||
|
||||
@@ -3825,9 +3826,29 @@ def _update_backend_ref(ref: str, *, fetch: bool = True) -> str:
|
||||
|
||||
print_step(f"切换后端代码到指定版本:{ref}")
|
||||
run(["git", "checkout", ref], cwd=ROOT)
|
||||
if fetch and _git_output("rev-parse", "--abbrev-ref", "HEAD") == ref:
|
||||
run(["git", "pull", "--ff-only", "origin", ref], cwd=ROOT)
|
||||
return ref
|
||||
|
||||
|
||||
def _resolve_update_versions(args: argparse.Namespace) -> tuple[str, Optional[str]]:
|
||||
"""更新命令读取 Dev 偏好;显式版本优先,离线安装始终使用已确认制品。"""
|
||||
value = os.environ.get("MOVIEPILOT_UPDATE_DEV")
|
||||
if value is None:
|
||||
value = read_env_value("MOVIEPILOT_UPDATE_DEV") or "false"
|
||||
dev = args.dev if args.dev is not None else value.strip().lower() in {
|
||||
"1", "true", "yes", "y", "on"
|
||||
}
|
||||
dev = dev and not args.offline_backend
|
||||
ref = args.ref
|
||||
if not ref:
|
||||
ref = "latest"
|
||||
if dev and args.target in {"backend", "all"} and _git_output("rev-parse", "--abbrev-ref", "HEAD") == "HEAD":
|
||||
ref = RESOURCE_VERSION_FLAG
|
||||
frontend_version = args.frontend_version or ("latest" if dev else None)
|
||||
return ref, frontend_version
|
||||
|
||||
|
||||
def update_backend(
|
||||
*,
|
||||
ref: str,
|
||||
@@ -3836,6 +3857,7 @@ def update_backend(
|
||||
recreate: bool,
|
||||
fetch: bool = True,
|
||||
) -> Path:
|
||||
"""更新指定后端版本并同步其虚拟环境依赖。"""
|
||||
ensure_services_stopped()
|
||||
resolved_ref = _update_backend_ref(ref=ref, fetch=fetch)
|
||||
venv_python = install_deps(
|
||||
@@ -3920,6 +3942,7 @@ def run_agent_request(
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
"""定义本地安装、显式更新和初始化命令的参数。"""
|
||||
parser = argparse.ArgumentParser(description="MoviePilot 本地安装与初始化工具")
|
||||
subparsers = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
@@ -4049,13 +4072,17 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
|
||||
update_parser = subparsers.add_parser("update", help="更新本地后端、前端或全部组件")
|
||||
update_parser.add_argument(
|
||||
"target", choices=["backend", "frontend", "all"], help="更新目标"
|
||||
"target", nargs="?", default="all", choices=["backend", "frontend", "all"], help="更新目标,默认 all"
|
||||
)
|
||||
update_parser.add_argument(
|
||||
"--ref", default="latest", help="后端 Git 版本,默认 latest"
|
||||
"--ref", help="后端 Git 版本,默认跟踪当前分支;DEV 模式下 detached HEAD 回到 v3"
|
||||
)
|
||||
update_parser.add_argument(
|
||||
"--frontend-version", help="前端版本,默认使用 version.py 中的 FRONTEND_VERSION"
|
||||
"--dev", action=argparse.BooleanOptionalAction, default=None,
|
||||
help="使用 DEV 更新模式,默认读取 MOVIEPILOT_UPDATE_DEV;--no-dev 关闭"
|
||||
)
|
||||
update_parser.add_argument(
|
||||
"--frontend-version", help="前端版本,DEV 默认 latest,否则使用 version.py 中的 FRONTEND_VERSION"
|
||||
)
|
||||
update_parser.add_argument(
|
||||
"--frontend-archive",
|
||||
@@ -4138,6 +4165,7 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
|
||||
|
||||
def main() -> int:
|
||||
"""按选定配置目录执行本地管理命令并返回退出码。"""
|
||||
parser = build_parser()
|
||||
args = parser.parse_args()
|
||||
explicit_config_dir = (
|
||||
@@ -4265,10 +4293,11 @@ def main() -> int:
|
||||
return 0
|
||||
|
||||
if args.command == "update":
|
||||
ref, frontend_version = _resolve_update_versions(args)
|
||||
ensure_services_stopped()
|
||||
if args.target in {"backend", "all"}:
|
||||
update_backend(
|
||||
ref=args.ref,
|
||||
ref=ref,
|
||||
python_bin=args.python,
|
||||
venv_dir=Path(args.venv),
|
||||
recreate=args.recreate,
|
||||
@@ -4276,7 +4305,7 @@ def main() -> int:
|
||||
)
|
||||
if args.target in {"frontend", "all"}:
|
||||
frontend_result = install_frontend(
|
||||
frontend_version=args.frontend_version,
|
||||
frontend_version=frontend_version,
|
||||
node_version=args.node_version,
|
||||
archive=Path(args.frontend_archive) if args.frontend_archive else None,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user