diff --git a/crates/binstalk/src/ops/resolve/resolution.rs b/crates/binstalk/src/ops/resolve/resolution.rs index 8862faea..fa06322e 100644 --- a/crates/binstalk/src/ops/resolve/resolution.rs +++ b/crates/binstalk/src/ops/resolve/resolution.rs @@ -126,10 +126,11 @@ impl ResolutionFetch { impl ResolutionSource { pub async fn install(self, opts: Arc) -> Result<(), BinstallError> { - let desired_targets = opts.desired_targets.get().await; - let target = desired_targets - .first() - .ok_or(BinstallError::NoViableTargets)?; + let target = if let Some(targets) = opts.desired_targets.get_initialized() { + Some(targets.first().ok_or(BinstallError::NoViableTargets)?) + } else { + None + }; let name = &self.name; let version = &self.version; @@ -138,21 +139,18 @@ impl ResolutionSource { .map(Cow::Owned) .unwrap_or_else(|| Cow::Borrowed(OsStr::new("cargo"))); - debug!( - "Running `{} install {name} --version {version} --target {target}`", - Path::new(&cargo).display(), - ); - let mut cmd = Command::new(cargo); cmd.arg("install") .arg(name) .arg("--version") .arg(version) - .arg("--target") - .arg(target) .kill_on_drop(true); + if let Some(target) = target { + cmd.arg("--target").arg(target); + } + if opts.quiet { cmd.arg("--quiet"); } @@ -173,6 +171,8 @@ impl ResolutionSource { cmd.arg("--no-track"); } + debug!("Running `{}`", format_cmd(&cmd),); + if !opts.dry_run { let mut child = opts .jobserver_client diff --git a/crates/detect-targets/src/desired_targets.rs b/crates/detect-targets/src/desired_targets.rs index 0f236d7b..36726495 100644 --- a/crates/detect-targets/src/desired_targets.rs +++ b/crates/detect-targets/src/desired_targets.rs @@ -41,6 +41,17 @@ impl DesiredTargets { AutoDetect(once_cell) => once_cell.get_or_init(detect_targets).await, } } + + /// If `DesiredTargets` is provided with a list of desired targets instead + /// of detecting the targets, then this function would return `Some`. + pub fn get_initialized(&self) -> Option<&[String]> { + use DesiredTargetsInner::*; + + match &self.0 { + Initialized(targets) => Some(targets), + AutoDetect(..) => None, + } + } } /// If opts_targets is `Some`, then it will be used.