diff --git a/src/backend/aqua.rs b/src/backend/aqua.rs index 6e5237d8cd..2231f8b76f 100644 --- a/src/backend/aqua.rs +++ b/src/backend/aqua.rs @@ -290,6 +290,11 @@ impl Backend for AquaBackend { (url, v.to_string(), filename, digest) }; + // Determine operation count for progress reporting + let format = pkg.format(&v, os(), arch()).unwrap_or_default(); + let op_count = Self::calculate_op_count(&pkg, &api_digest, format); + ctx.pr.start_operations(op_count); + self.download(ctx, &tv, &url, &filename).await?; if existing_platform.is_none() { @@ -557,6 +562,29 @@ impl AquaBackend { } } + /// Calculate the number of operations for progress reporting. + /// Operations: download (always), checksum (if enabled or api_digest), extraction (if needed) + fn calculate_op_count(pkg: &AquaPackage, api_digest: &Option, format: &str) -> usize { + let mut op_count = 1; // download + + // Checksum verification (from pkg config or GitHub API digest) + if pkg.checksum.as_ref().is_some_and(|c| c.enabled()) || api_digest.is_some() { + op_count += 1; + } + + // Extraction (for archives, or GithubArchive/GithubContent which always extract) + if (!format.is_empty() && format != "raw") + || matches!( + pkg.r#type, + AquaPackageType::GithubArchive | AquaPackageType::GithubContent + ) + { + op_count += 1; + } + + op_count + } + async fn github_release_url( &self, pkg: &AquaPackage, diff --git a/src/cli/doctor/mod.rs b/src/cli/doctor/mod.rs index 6795d128e1..6177df04dd 100644 --- a/src/cli/doctor/mod.rs +++ b/src/cli/doctor/mod.rs @@ -16,7 +16,7 @@ use crate::plugins::PluginType; use crate::plugins::core::CORE_PLUGINS; use crate::toolset::{ToolVersion, Toolset, ToolsetBuilder}; use crate::ui::{info, style}; -use crate::{backend, cmd, dirs, duration, env, file, shims}; +use crate::{backend, dirs, duration, env, file, shims}; use console::{Alignment, pad_str, style}; use heck::ToSnakeCase; use indexmap::IndexMap; diff --git a/src/cli/prepare.rs b/src/cli/prepare.rs index c4355d6a51..9c2593dc53 100644 --- a/src/cli/prepare.rs +++ b/src/cli/prepare.rs @@ -1,7 +1,6 @@ use eyre::Result; use crate::config::Config; -use crate::miseprintln; use crate::prepare::{PrepareEngine, PrepareOptions, PrepareStepResult}; use crate::toolset::{InstallOptions, ToolsetBuilder}; diff --git a/src/cli/self_update.rs b/src/cli/self_update.rs index c0967be51b..2e61ec285d 100644 --- a/src/cli/self_update.rs +++ b/src/cli/self_update.rs @@ -6,7 +6,7 @@ use self_update::{Status, cargo_crate_version}; use crate::cli::version::{ARCH, OS}; use crate::config::Settings; -use crate::{cmd, env}; +use crate::env; use std::collections::BTreeMap; use std::fs; #[cfg(target_os = "macos")] diff --git a/src/cli/sync/node.rs b/src/cli/sync/node.rs index 97577b635f..9dd2ea565e 100644 --- a/src/cli/sync/node.rs +++ b/src/cli/sync/node.rs @@ -3,7 +3,7 @@ use std::path::PathBuf; use eyre::Result; use itertools::sorted; -use crate::{backend, cmd, config, dirs, file}; +use crate::{backend, config, dirs, file}; use crate::{ config::Config, env::{NODENV_ROOT, NVM_DIR}, diff --git a/src/cli/sync/ruby.rs b/src/cli/sync/ruby.rs index fea5cf2eac..13bc5e3635 100644 --- a/src/cli/sync/ruby.rs +++ b/src/cli/sync/ruby.rs @@ -4,7 +4,7 @@ use eyre::Result; use itertools::sorted; use crate::{ - backend, cmd, + backend, config::{self, Config}, dirs, file, }; diff --git a/src/env_diff.rs b/src/env_diff.rs index 49dce8c0be..220da36d06 100644 --- a/src/env_diff.rs +++ b/src/env_diff.rs @@ -15,7 +15,7 @@ use serde_derive::{Deserialize, Serialize}; use std::sync::LazyLock as Lazy; use crate::env::PATH_KEY; -use crate::{cmd, file}; +use crate::file; #[derive(Default, Serialize, Deserialize)] pub struct EnvDiff { diff --git a/src/file.rs b/src/file.rs index 167db2170b..470fbfaa96 100644 --- a/src/file.rs +++ b/src/file.rs @@ -25,7 +25,7 @@ use zip::ZipArchive; #[cfg(windows)] use crate::config::Settings; use crate::ui::progress_report::SingleReport; -use crate::{cmd, dirs, env}; +use crate::{dirs, env}; pub fn open>(path: P) -> Result { let path = path.as_ref(); diff --git a/src/git.rs b/src/git.rs index 2ccd0cb7f2..b26a9bf696 100644 --- a/src/git.rs +++ b/src/git.rs @@ -7,7 +7,6 @@ use gix::{self}; use once_cell::sync::OnceCell; use xx::file; -use crate::cmd; use crate::cmd::CmdLineRunner; use crate::config::Settings; use crate::file::touch_dir; diff --git a/src/plugins/core/erlang.rs b/src/plugins/core/erlang.rs index 0ff98bc41a..84bc663b39 100644 --- a/src/plugins/core/erlang.rs +++ b/src/plugins/core/erlang.rs @@ -13,7 +13,7 @@ use crate::http::{HTTP, HTTP_FETCH}; use crate::install_context::InstallContext; use crate::lock_file::LockFile; use crate::toolset::{ToolRequest, ToolVersion}; -use crate::{cmd, file, github, plugins}; +use crate::{file, github, plugins}; use async_trait::async_trait; use eyre::Result; use xx::regex; diff --git a/src/plugins/core/go.rs b/src/plugins/core/go.rs index 0e6f9d31f3..995128d45b 100644 --- a/src/plugins/core/go.rs +++ b/src/plugins/core/go.rs @@ -14,7 +14,7 @@ use crate::install_context::InstallContext; use crate::lockfile::PlatformInfo; use crate::toolset::{ToolRequest, ToolVersion, Toolset}; use crate::ui::progress_report::SingleReport; -use crate::{cmd, env, file, github, plugins}; +use crate::{env, file, github, plugins}; use async_trait::async_trait; use itertools::Itertools; use tempfile::tempdir_in; diff --git a/src/plugins/core/python.rs b/src/plugins/core/python.rs index 35441d40af..a9e5fc72c5 100644 --- a/src/plugins/core/python.rs +++ b/src/plugins/core/python.rs @@ -12,7 +12,7 @@ use crate::install_context::InstallContext; use crate::toolset::{ToolRequest, ToolVersion, Toolset}; use crate::ui::progress_report::SingleReport; use crate::{Result, lock_file::LockFile}; -use crate::{cmd, dirs, file, plugins, sysconfig}; +use crate::{dirs, file, plugins, sysconfig}; use async_trait::async_trait; use eyre::{bail, eyre}; use flate2::read::GzDecoder; diff --git a/src/plugins/core/ruby.rs b/src/plugins/core/ruby.rs index 9e88fd874f..c3505698ad 100644 --- a/src/plugins/core/ruby.rs +++ b/src/plugins/core/ruby.rs @@ -18,7 +18,7 @@ use crate::lockfile::PlatformInfo; use crate::plugins::PluginSource; use crate::toolset::{ToolRequest, ToolVersion, Toolset}; use crate::ui::progress_report::SingleReport; -use crate::{cmd, file, plugins, timeout}; +use crate::{file, plugins, timeout}; use async_trait::async_trait; use eyre::{Result, WrapErr}; use itertools::Itertools; diff --git a/src/ui/multi_progress_report.rs b/src/ui/multi_progress_report.rs index 1911cc4574..0489ac0ec0 100644 --- a/src/ui/multi_progress_report.rs +++ b/src/ui/multi_progress_report.rs @@ -5,7 +5,6 @@ use indicatif::{MultiProgress, ProgressBar}; use crate::cli::version::VERSION_PLAIN; use crate::config::Settings; -use crate::progress_trace; use crate::ui::osc::{self, ProgressState}; use crate::ui::progress_report::{ProgressReport, QuietReport, SingleReport, VerboseReport}; use crate::ui::style; diff --git a/src/ui/progress_report.rs b/src/ui/progress_report.rs index 3664918819..e938ba3395 100644 --- a/src/ui/progress_report.rs +++ b/src/ui/progress_report.rs @@ -10,7 +10,6 @@ use std::{ use indicatif::{ProgressBar, ProgressStyle}; use std::sync::LazyLock as Lazy; -use crate::progress_trace; use crate::ui::style; use crate::{backend, env, ui};