fix(java): Termux 幂等安装报「未走网络」,vendors 在 Termux 上展示 termux 行

- termux::install 返回 (home, reused),复用时 downloaded=None,
  CLI 不再显示「0 字节 / 0 个文件」
- java vendors 在 Termux 上把 termux 插到顺序最前(仅展示,默认回退序不变)
This commit is contained in:
AskaEth committed 2026-11-07 09:33:20 +08:00
1 parent 48d1ee6616
commit 7b971dc75d
4 files changed
+21 -9

No files matched your search

+5 -1
View File
@@ -23,7 +23,11 @@ use crate::output::Report;
pub fn vendors(ctx: &Ctx) -> Result<Report, CliError> {
let settings = JavaSettings::load(ctx);
let domestic = region_profile(ctx).is_domestic();
let order = vendor::order(&settings.priority, domestic);
let mut order = vendor::order(&settings.priority, domestic);
// Termux 上系统包是一条真实可用的发行版:不进默认回退序,但展示时要让人看见。
if termux::available() && !order.contains(&JdkVendor::Termux) {
order.insert(0, JdkVendor::Termux);
}
let table = MirrorTable::builtin();
let rows: Vec<Value> = order
.iter()
+6 -2
View File
@@ -206,7 +206,7 @@ pub async fn install(
);
}
match super::termux::install(request.major).await {
Ok(home) => {
Ok((home, reused)) => {
let mut runtime = probe::probe(&extract::java_binary(&home), JavaOrigin::Managed);
runtime.vendor = Some(JdkVendor::Termux.id().to_string());
let version = runtime
@@ -235,7 +235,11 @@ pub async fn install(
mode: location.mode,
archive: PathBuf::new(),
runtime,
downloaded: Some("termux".to_string()),
downloaded: if reused {
None
} else {
Some("termux".to_string())
},
bytes: 0,
files: 0,
extracted: false,
+6 -2
View File
@@ -69,7 +69,10 @@ pub fn sources_line(mirror: &str) -> String {
/// # Errors
///
/// 当前不在 Termux、主源没有该大版本、所有镜像都失败、装完仍找不到 `bin/java` 时返回错误。
pub async fn install(major: u32) -> Result<PathBuf, JavaError> {
///
/// 返回 `(JDK 根, 是否复用了已装)`:包管理器刚装完与「本来就有」对调用方是两种结果
/// (一个要报安装,一个要报「未走网络」)。
pub async fn install(major: u32) -> Result<(PathBuf, bool), JavaError> {
let Some(package) = package_for(major) else {
return Err(JavaError::new(
JavaErrorKind::Unsupported,
@@ -86,7 +89,7 @@ pub async fn install(major: u32) -> Result<PathBuf, JavaError> {
// 幂等:已经装了同一大版本就不碰网络。
if let Some(home) = installed_home(&prefix, major) {
return Ok(home);
return Ok((home, true));
}
let workspace = workspace_dir(&prefix, major);
@@ -109,6 +112,7 @@ pub async fn install(major: u32) -> Result<PathBuf, JavaError> {
format!("Termux 安装任务没能完成:{error}"),
)
})?
.map(|home| (home, false))
}
/// 逐镜像尝试 `apt-get`(阻塞,跑在 `spawn_blocking` 里)。
+4 -4
View File
@@ -30,10 +30,10 @@ pub fn prefix(env: &dyn EnvSource) -> Option<PathBuf> {
if !is_termux(env) {
return None;
}
Some(env.var("PREFIX").map_or_else(
|| PathBuf::from(DEFAULT_PREFIX),
PathBuf::from,
))
Some(
env.var("PREFIX")
.map_or_else(|| PathBuf::from(DEFAULT_PREFIX), PathBuf::from),
)
}
/// Termux 的 JDK 安装根(`$PREFIX/lib/jvm`)。