mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-05-04 10:33:47 +01:00
feat: scan for engines without version management
This commit is contained in:
parent
8f185d70e3
commit
a99420e05d
1 changed files with 36 additions and 14 deletions
|
@ -368,25 +368,26 @@ pub fn dep_type_to_key(dep_type: DependencyType) -> &'static str {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "version-management")]
|
#[cfg_attr(not(feature = "version-management"), allow(unused_variables))]
|
||||||
pub async fn get_project_engines(
|
pub async fn get_project_engines(
|
||||||
manifest: &Manifest,
|
manifest: &Manifest,
|
||||||
reqwest: &reqwest::Client,
|
reqwest: &reqwest::Client,
|
||||||
) -> anyhow::Result<HashMap<EngineKind, Version>> {
|
) -> anyhow::Result<HashMap<EngineKind, Version>> {
|
||||||
use tokio::task::JoinSet;
|
use tokio::task::JoinSet;
|
||||||
use version::get_installed_versions;
|
|
||||||
|
|
||||||
crate::cli::reporters::run_with_reporter(|_, root_progress, reporter| async {
|
crate::cli::reporters::run_with_reporter(|_, root_progress, reporter| async {
|
||||||
let root_progress = root_progress;
|
let root_progress = root_progress;
|
||||||
|
#[cfg(feature = "version-management")]
|
||||||
let reporter = reporter;
|
let reporter = reporter;
|
||||||
|
|
||||||
root_progress.set_prefix(format!("{} {}: ", manifest.name, manifest.target));
|
root_progress.set_prefix(format!("{} {}: ", manifest.name, manifest.target));
|
||||||
root_progress.reset();
|
root_progress.reset();
|
||||||
root_progress.set_message("update engines");
|
root_progress.set_message("update engines");
|
||||||
|
|
||||||
let mut tasks = EngineKind::VARIANTS
|
let tasks = EngineKind::VARIANTS.iter().copied();
|
||||||
.iter()
|
|
||||||
.copied()
|
#[cfg(feature = "version-management")]
|
||||||
|
let mut tasks = tasks
|
||||||
.map(|engine| {
|
.map(|engine| {
|
||||||
let req = manifest.engines.get(&engine).cloned();
|
let req = manifest.engines.get(&engine).cloned();
|
||||||
let reqwest = reqwest.clone();
|
let reqwest = reqwest.clone();
|
||||||
|
@ -394,7 +395,7 @@ pub async fn get_project_engines(
|
||||||
|
|
||||||
async move {
|
async move {
|
||||||
let Some(req) = req else {
|
let Some(req) = req else {
|
||||||
return get_installed_versions(engine)
|
return version::get_installed_versions(engine)
|
||||||
.await
|
.await
|
||||||
.map(|mut vers| vers.pop_last().map(|v| (engine, v)));
|
.map(|mut vers| vers.pop_last().map(|v| (engine, v)));
|
||||||
};
|
};
|
||||||
|
@ -415,6 +416,35 @@ pub async fn get_project_engines(
|
||||||
})
|
})
|
||||||
.collect::<JoinSet<_>>();
|
.collect::<JoinSet<_>>();
|
||||||
|
|
||||||
|
#[cfg(not(feature = "version-management"))]
|
||||||
|
let mut tasks = tasks
|
||||||
|
.map(|engine| async move {
|
||||||
|
let output = tokio::process::Command::new(engine.to_string())
|
||||||
|
.arg("--version")
|
||||||
|
.stdout(std::process::Stdio::piped())
|
||||||
|
.output()
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let output = match output {
|
||||||
|
Ok(output) => output.stdout,
|
||||||
|
Err(e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(None),
|
||||||
|
Err(e) => return Err(e).context(format!("failed to execute {engine}")),
|
||||||
|
};
|
||||||
|
|
||||||
|
let output = String::from_utf8(output)
|
||||||
|
.with_context(|| format!("failed to parse {engine} version output"))?;
|
||||||
|
let version = output
|
||||||
|
.split_once(' ')
|
||||||
|
.with_context(|| format!("failed to split {engine} version output"))?
|
||||||
|
.1;
|
||||||
|
let version = version.trim().trim_start_matches('v');
|
||||||
|
let version = Version::parse(version)
|
||||||
|
.with_context(|| format!("failed to parse {engine} version"))?;
|
||||||
|
|
||||||
|
Ok::<_, anyhow::Error>(Some((engine, version)))
|
||||||
|
})
|
||||||
|
.collect::<JoinSet<_>>();
|
||||||
|
|
||||||
let mut resolved_engine_versions = HashMap::new();
|
let mut resolved_engine_versions = HashMap::new();
|
||||||
|
|
||||||
while let Some(task) = tasks.join_next().await {
|
while let Some(task) = tasks.join_next().await {
|
||||||
|
@ -429,14 +459,6 @@ pub async fn get_project_engines(
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "version-management"))]
|
|
||||||
pub async fn get_project_engines(
|
|
||||||
_manifest: &Manifest,
|
|
||||||
_reqwest: &reqwest::Client,
|
|
||||||
) -> anyhow::Result<HashMap<EngineKind, Version>> {
|
|
||||||
Ok(Default::default())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn compatible_runtime(
|
pub fn compatible_runtime(
|
||||||
target: TargetKind,
|
target: TargetKind,
|
||||||
engines: &HashMap<EngineKind, Version>,
|
engines: &HashMap<EngineKind, Version>,
|
||||||
|
|
Loading…
Add table
Reference in a new issue