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> {
|
pub fn vendors(ctx: &Ctx) -> Result<Report, CliError> {
|
||||||
let settings = JavaSettings::load(ctx);
|
let settings = JavaSettings::load(ctx);
|
||||||
let domestic = region_profile(ctx).is_domestic();
|
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 table = MirrorTable::builtin();
|
||||||
let rows: Vec<Value> = order
|
let rows: Vec<Value> = order
|
||||||
.iter()
|
.iter()
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ pub async fn install(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
match super::termux::install(request.major).await {
|
match super::termux::install(request.major).await {
|
||||||
Ok(home) => {
|
Ok((home, reused)) => {
|
||||||
let mut runtime = probe::probe(&extract::java_binary(&home), JavaOrigin::Managed);
|
let mut runtime = probe::probe(&extract::java_binary(&home), JavaOrigin::Managed);
|
||||||
runtime.vendor = Some(JdkVendor::Termux.id().to_string());
|
runtime.vendor = Some(JdkVendor::Termux.id().to_string());
|
||||||
let version = runtime
|
let version = runtime
|
||||||
@@ -235,7 +235,11 @@ pub async fn install(
|
|||||||
mode: location.mode,
|
mode: location.mode,
|
||||||
archive: PathBuf::new(),
|
archive: PathBuf::new(),
|
||||||
runtime,
|
runtime,
|
||||||
downloaded: Some("termux".to_string()),
|
downloaded: if reused {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some("termux".to_string())
|
||||||
|
},
|
||||||
bytes: 0,
|
bytes: 0,
|
||||||
files: 0,
|
files: 0,
|
||||||
extracted: false,
|
extracted: false,
|
||||||
|
|||||||
@@ -69,7 +69,10 @@ pub fn sources_line(mirror: &str) -> String {
|
|||||||
/// # Errors
|
/// # Errors
|
||||||
///
|
///
|
||||||
/// 当前不在 Termux、主源没有该大版本、所有镜像都失败、装完仍找不到 `bin/java` 时返回错误。
|
/// 当前不在 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 {
|
let Some(package) = package_for(major) else {
|
||||||
return Err(JavaError::new(
|
return Err(JavaError::new(
|
||||||
JavaErrorKind::Unsupported,
|
JavaErrorKind::Unsupported,
|
||||||
@@ -86,7 +89,7 @@ pub async fn install(major: u32) -> Result<PathBuf, JavaError> {
|
|||||||
|
|
||||||
// 幂等:已经装了同一大版本就不碰网络。
|
// 幂等:已经装了同一大版本就不碰网络。
|
||||||
if let Some(home) = installed_home(&prefix, major) {
|
if let Some(home) = installed_home(&prefix, major) {
|
||||||
return Ok(home);
|
return Ok((home, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
let workspace = workspace_dir(&prefix, major);
|
let workspace = workspace_dir(&prefix, major);
|
||||||
@@ -109,6 +112,7 @@ pub async fn install(major: u32) -> Result<PathBuf, JavaError> {
|
|||||||
format!("Termux 安装任务没能完成:{error}"),
|
format!("Termux 安装任务没能完成:{error}"),
|
||||||
)
|
)
|
||||||
})?
|
})?
|
||||||
|
.map(|home| (home, false))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 逐镜像尝试 `apt-get`(阻塞,跑在 `spawn_blocking` 里)。
|
/// 逐镜像尝试 `apt-get`(阻塞,跑在 `spawn_blocking` 里)。
|
||||||
|
|||||||
@@ -30,10 +30,10 @@ pub fn prefix(env: &dyn EnvSource) -> Option<PathBuf> {
|
|||||||
if !is_termux(env) {
|
if !is_termux(env) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
Some(env.var("PREFIX").map_or_else(
|
Some(
|
||||||
|| PathBuf::from(DEFAULT_PREFIX),
|
env.var("PREFIX")
|
||||||
PathBuf::from,
|
.map_or_else(|| PathBuf::from(DEFAULT_PREFIX), PathBuf::from),
|
||||||
))
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Termux 的 JDK 安装根(`$PREFIX/lib/jvm`)。
|
/// Termux 的 JDK 安装根(`$PREFIX/lib/jvm`)。
|
||||||
|
|||||||
Reference in new issue
Block a user