fix(core,app-iced): M308 Linux/macOS 的 .tar.gz 真的能自替换 + 重试按 retryable 分流 + 三处文档纠偏
M307 盘查抓到的一条真缺陷 + 两处交互/文档不一致,本条只修它们,不重做通道:
① Linux/macOS 自更新的真缺陷(选 A:真做)
`job::self_replaceable` 只认裸 exe,而发布矩阵里那两平台的启动器是 `.tar.gz`(清单记作
`portable-zip`)⇒ 查得到更新、按钮画得出来、点下去必失败。新增 `core::update::unpack`:
**归档字节过完长度/摘要双检之后**,从归档里取出启动器本体(tar 头 mode 有可执行位 /
`.exe` 名字的唯一普通文件),再交给原有的 `install_staged`(原子替换 + 回滚一字未改)。
零新依赖(flate2/tar 早就是 core 的依赖,`core::game::java` 解 Temurin 用同一套)。
三条具名错误:`LauncherMissing` / `LauncherNotExecutable`(魔数与 target 不符)/
`LauncherSizeMismatch`(0 字节 / 超上限 / 与头声明不符);zip 容器**明确拒绝**(没有可靠的
「哪个条目可执行」判据,不猜)。`target.rs` 的 `PackageFormat` 文档改成与判据逐字一致。
② 重试按钮按 `retryable` 分流
验签类(`is_retryable == false`)不画「重试」,正文换成新 key `UpdateBannerFailedFinal`
(「这次更新已被拒绝(重试没用):{reason}」)。文案抽到 `pages/update/failure.rs`
(`pages/update.rs` 的红线),判据落在**真 Widget 树**上(探针 tag + 递归计数)。
③ 三处文档纠偏 + 同一条谎话的其它落点(都在 scope 内)
`trust.rs`(正式表已有 `ull-release`,commit 68362e5)、`check_signing_ready.py` 自述、
`target.rs`;顺带 `packaging/README.md`、`docs/{signing,signing-runbook}.md`、
`check_test_key_off.py`;新文档 `docs/update-trust-anchor.md` 记「M254 审计的『正式表为空』
已作废」。
判据:core 新增 `unpack_cases`(Linux tar.gz / macOS tar.gz 走完整条链 + 五种拒绝)、
`job_cases` 的形态表改成两种;app-iced 两条真 Widget 树用例(按钮在 / 不在)+ 一条取词入口用例
+ 一条源码守卫。i18n 加一条 key 并**重出金表**(`Key::ALL` 853 行,新行落在 index 834)。
This commit is contained in:
1 parent
db24379e35
commit
af82658d08
24 files changed
+1201
-58
No files matched your search
@@ -221,6 +221,9 @@ pub(super) const ROWS: &[(&str, &str, &str)] = &[
|
||||
("UpdateBannerDismiss", "Skip this version", "忽略这个版本"),
|
||||
("UpdateBannerRestartNow", "Restart now", "立即重启"),
|
||||
("UpdateBannerRetry", "Try again", "重试"),
|
||||
// M308:验签类(不可重试)失败的那句整话。位置跟着 update 域走(金表是 `Key::ALL` 的逐 index
|
||||
// 镜像):它排在 `UpdateBannerRetry` 之后、`FontCjk*` 之前,不是文件末尾追加。
|
||||
("UpdateBannerFailedFinal", "This update was refused, and retrying will not help: {reason}", "这次更新已被拒绝(重试没用):{reason}"),
|
||||
// M168:中文字体下载状态行(链尾追加,既有顺序不动)
|
||||
("FontCjkStatusLabel", "Chinese font", "中文字体"),
|
||||
("FontCjkStatusNotNeeded", "Not needed for this interface language", "当前界面语言不需要中文字体"),
|
||||
|
||||
@@ -52,6 +52,13 @@ macro_rules! update_entries {
|
||||
UpdateBannerDismiss => ("Skip this version", "忽略这个版本"),
|
||||
UpdateBannerRestartNow => ("Restart now", "立即重启"),
|
||||
UpdateBannerRetry => ("Try again", "重试"),
|
||||
// M308:验签类失败(`retryable == false`)的整句。前半句是「已拒绝」、后半句点明
|
||||
// 「重试没用」——两件事都要有,只藏掉按钮而不说原因等于让用户对着一条红条猜。
|
||||
// `{reason}` 由页面传入(presenter 给的分类人话,例如签名对不上 / 钥不认得)。
|
||||
UpdateBannerFailedFinal => (
|
||||
"This update was refused, and retrying will not help: {reason}",
|
||||
"这次更新已被拒绝(重试没用):{reason}"
|
||||
),
|
||||
} }
|
||||
};
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user