fix(java): Termux 幂等安装报「未走网络」,vendors 在 Termux 上展示 termux 行
- termux::install 返回 (home, reused),复用时 downloaded=None, CLI 不再显示「0 字节 / 0 个文件」 - java vendors 在 Termux 上把 termux 插到顺序最前(仅展示,默认回退序不变)
This commit is contained in:
1 parent
c9efdf0fd1
commit
38f4682dba
4 files changed
+21
-9
No files matched your search
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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` 里)。
|
||||
|
||||
@@ -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`)。
|
||||
|
||||
Reference in new issue
Block a user