cjv self update 当前是空 stub,直接返回错误:
cjv self update
// src/self_update.rs pub fn self_update() -> Result<()> { Err(CjvError::InvalidArgument( "cjv self update is not implemented in this beta; install a newer release manually" .to_string(), )) }
README 命令参考表里也标注为"暂未实现;当前 beta 会明确报错"。同时 cmd_update(src/cli.rs)在 auto-self-update=enable 时会跳过并打印同一句"not implemented"提示——本 issue 一并移除。
cmd_update
src/cli.rs
auto-self-update=enable
复用 install.sh 已定义的发布规律:
install.sh
https://github.com/cj-awesome/cjv/releases/download/v{VERSION}/cjv-{GOOS}-{GOARCH}.tar.gz https://atomgit.com/cj-awesome/cjv/releases/download/v{VERSION}/cjv-{GOOS}-{GOARCH}.tar.gz (镜像)
其中 {GOOS}-{GOARCH} 由现有 utils::current_platform() 产出(linux-amd64 / darwin-arm64 / windows-amd64)。VERSION 取仓内 CARGO_PKG_VERSION 前缀(如 0.3.0-beta → 查 release tag v0.3.0-beta)。
{GOOS}-{GOARCH}
utils::current_platform()
linux-amd64
darwin-arm64
windows-amd64
VERSION
CARGO_PKG_VERSION
0.3.0-beta
v0.3.0-beta
cjv-{platform}.tar.gz
dist::download_file
.sha256
dist::extract_archive
std::fs::rename
std::env::current_exe()
~/.cjv/bin/cjv
cjv.exe.old
cli.rs::cmd_update 中 auto_self_update=enable 分支改为调用 self_update::self_update(),成功后继续更新工具链;失败时按 auto-self-update=check 提示用户手动执行。
cli.rs::cmd_update
auto_self_update=enable
self_update::self_update()
auto-self-update=check
下载 URL 优先 GitHub;失败(429/5xx/超时)回退 AtomGit 镜像。两源均失败时返回明确错误。
resolve_latest_release_tag
cargo test
cjv self update --version <ver>
self_uninstall
init_cmd
downloads purge
请确认方向是否 OK,确认后即开始编码。
领取本 issue,按上述方案开始实现。fork 已建:huqi/fork-cjv,分支 feat/self-update。
缺口
cjv self update当前是空 stub,直接返回错误:// src/self_update.rs pub fn self_update() -> Result<()> { Err(CjvError::InvalidArgument( "cjv self update is not implemented in this beta; install a newer release manually" .to_string(), )) }README 命令参考表里也标注为"暂未实现;当前 beta 会明确报错"。同时
cmd_update(src/cli.rs)在auto-self-update=enable时会跳过并打印同一句"not implemented"提示——本 issue 一并移除。实现方案(最小闭环,单 PR)
1. 下载源
复用
install.sh已定义的发布规律:其中
{GOOS}-{GOARCH}由现有utils::current_platform()产出(linux-amd64/darwin-arm64/windows-amd64)。VERSION取仓内CARGO_PKG_VERSION前缀(如0.3.0-beta→ 查 release tagv0.3.0-beta)。2. 流程
CARGO_PKG_VERSION比较;一致则提示已是最新并返回cjv-{platform}.tar.gz到临时目录(复用dist::download_file).sha256文件则下载并比对,否则警告跳过——与 install.sh 行为一致)dist::extract_archive)std::fs::rename原子替换当前std::env::current_exe();若目标在只读挂载则回退到~/.cjv/bin/cjvcjv.exe.old(重启时清理),再写入新二进制3. cmd_update 联动
cli.rs::cmd_update中auto_self_update=enable分支改为调用self_update::self_update(),成功后继续更新工具链;失败时按auto-self-update=check提示用户手动执行。4. 镜像回退
下载 URL 优先 GitHub;失败(429/5xx/超时)回退 AtomGit 镜像。两源均失败时返回明确错误。
5. 测试
resolve_latest_release_tag解析 logic(mock JSON)cargo test全通过6. 文档
cjv self update行改为"已实现"�范围边界
cjv self update --version <ver>指定版本(issue 未要求)self_uninstall现有行为init_cmd/downloads purge等其他自管理命令请确认方向是否 OK,确认后即开始编码。