`ull install` / `ull java` / `ull pack` 此前各自 `DownloadEngine::new(EngineConfig::default(), …)`: 用户在设置里配的 `download.concurrency` / `retry_limit` / `gh_proxy` 一概不生效;M193 把出厂并发 从 64 改成 8 之后,它们还静默跟着降了。现在三处都经 `crates/cli/src/download.rs::engine(ctx)`: - core:`shared/tuned.rs` 新增 `engine_with_tuning(cache_root, tune)` = `set_tuning` + `engine_for`, 由 `shared.rs` 重导出;`engine_for` 的签名与行为一字未改(presenter 的两步语义原样保留)。 放子模块是为了不动 `engine.rs`(那是 400 行零余量),`shared.rs` 仍 398 行。 - CLI:`download::tuning(ctx)` 用 `SettingStore::load(ctx.launcher_config(), launcher_schema())` 读 三个键(与 `ull config set` 同一份文件),默认值/夹取/回落在 `DownloadTuning::from_settings`; 键缺失或坏值静默回落出厂值,`engine()` 没有错误通道,安装不会因此中断。 - 顺带:`ull update` 复用 `install::build_engine`,也随之吃到设置。 - 测试:`crates/cli/src/download/tests.rs` 三条命令各一条(读 `config().max_concurrency` 与 `concurrency_probe()` 的真实值)+ 一条「缺失/越界/负数/类型不对 ⇒ 静默回落出厂值」; `shared/tuned.rs` 两条守住「灌调优与取引擎是一步」。变异实测:pack 换回裸 `EngineConfig::default()` ⇒ 只有 pack 那条红(left 8 / right 2)。
30 lines
1.3 KiB
Rust
30 lines
1.3 KiB
Rust
//! Unlucky-Launcher 命令行(`unlucky_cli`):`ull` 二进制的可测试内核。
|
||
//!
|
||
//! 设计定稿:`DevDocs/PlanDoc/10-cli-design.md`(D18)—— core 是零 UI 纯库,
|
||
//! CLI 只是与 Slint GUI 平级的第二个消费者,因此**本 crate 不依赖任何 UI 框架**。
|
||
//!
|
||
//! 分层:
|
||
//! - [`cli`]:手写参数解析(不引 clap)+ 命令模型 + 帮助文案;
|
||
//! - [`commands`]:每个子命令一个函数,输入 [`context::Ctx`],输出 [`output::Report`];
|
||
//! - [`download`]:CLI 侧的下载引擎(设置 store → core 调优,`install`/`java`/`pack` 共用);
|
||
//! - [`context`]:数据根解析(三模式 / `--data-dir` 覆盖)与目录视图;
|
||
//! - [`os`]:系统摘要与 D19/D21 支持级别(事实来自 core::platform::os_info,这里只做呈现);
|
||
//! - [`output`]:人类可读 + `--json` 双格式输出;
|
||
//! - [`error`]:错误形状与退出码(0 成功 / 1 用户错误 / 2 内部错误)。
|
||
//!
|
||
//! 可测试性:入口是 [`run`],参数是 `&[String]`,输出写进两个 `&mut dyn Write`,
|
||
//! 返回值就是进程退出码——集成测试因此不需要真的起子进程也能覆盖三条通道。
|
||
|
||
#![forbid(unsafe_code)]
|
||
|
||
pub mod cli;
|
||
pub mod commands;
|
||
pub mod context;
|
||
pub mod download;
|
||
pub mod error;
|
||
pub mod os;
|
||
pub mod output;
|
||
pub mod runner;
|
||
|
||
pub use runner::run;
|