From ebafba4e9bf4b077e5501fe37924a7e2338d05c2 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Tue, 23 Jul 2024 00:30:57 +1000 Subject: [PATCH] Optimize `resolve_inner`: Cache meta override Signed-off-by: Jiahao XU --- crates/binstalk/src/ops/resolve.rs | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/crates/binstalk/src/ops/resolve.rs b/crates/binstalk/src/ops/resolve.rs index 799324ef..71ad8288 100644 --- a/crates/binstalk/src/ops/resolve.rs +++ b/crates/binstalk/src/ops/resolve.rs @@ -88,13 +88,23 @@ async fn resolve_inner( return Ok(Resolution::AlreadyUpToDate); }; + let meta = package_info + .meta + .merge_overrides(iter::once(&opts.cli_overrides)); + let desired_targets = opts .desired_targets .get() .await .iter() - .map(|target| TargetTriple::from_str(target).map(|triple| (triple, target))) - .collect::, _>>()?; + .map(|target| { + Ok(( + TargetTriple::from_str(target)?, + target, + meta.merge_overrides(package_info.overrides.get(target)), + )) + }) + .collect::, BinstallError>>()?; let resolvers = &opts.resolvers; let binary_name = match package_info.binaries.as_slice() { @@ -119,19 +129,14 @@ async fn resolve_inner( resolvers .iter() .cartesian_product(desired_targets.clone().into_iter().map( - |(triple, target)| { + |(triple, target, target_meta)| { debug!("Building metadata for target: {target}"); - let target_meta = package_info.meta.merge_overrides( - iter::once(&opts.cli_overrides) - .chain(package_info.overrides.get(target)), - ); - debug!("Found metadata: {target_meta:?}"); Arc::new(TargetData { target: target.clone(), - meta: target_meta, + meta: target_meta.clone(), target_related_info: triple, }) }, @@ -247,15 +252,10 @@ async fn resolve_inner( return Err(BinstallError::NoFallbackToCargoInstall); } - let target_meta = if let Some((_, target)) = desired_targets.get(0) { - package_info.meta.merge_overrides( - iter::once(&opts.cli_overrides).chain(package_info.overrides.get(*target)), - ) - } else { - package_info - .meta - .merge_overrides(iter::once(&opts.cli_overrides)) - }; + let target_meta = desired_targets + .first() + .map(|(_, _, target_meta)| target_meta) + .unwrap_or(&meta); if let Some(disabled_strategies) = target_meta.disabled_strategies.as_deref() { if disabled_strategies.contains(&Strategy::Compile) { @@ -263,10 +263,10 @@ async fn resolve_inner( } } - return Ok(Resolution::InstallFromSource(ResolutionSource { + Ok(Resolution::InstallFromSource(ResolutionSource { name: package_info.name, version: package_info.version_str, - })); + })) } /// * `fetcher` - `fetcher.find()` must have returned `Ok(true)`.