Optimize resolve_inner: Cache meta override

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2024-07-23 00:30:57 +10:00
parent 898796b91d
commit ebafba4e9b
No known key found for this signature in database
GPG key ID: 76D1E687CA3C4928

View file

@ -88,13 +88,23 @@ async fn resolve_inner(
return Ok(Resolution::AlreadyUpToDate); return Ok(Resolution::AlreadyUpToDate);
}; };
let meta = package_info
.meta
.merge_overrides(iter::once(&opts.cli_overrides));
let desired_targets = opts let desired_targets = opts
.desired_targets .desired_targets
.get() .get()
.await .await
.iter() .iter()
.map(|target| TargetTriple::from_str(target).map(|triple| (triple, target))) .map(|target| {
.collect::<Result<Vec<_>, _>>()?; Ok((
TargetTriple::from_str(target)?,
target,
meta.merge_overrides(package_info.overrides.get(target)),
))
})
.collect::<Result<Vec<_>, BinstallError>>()?;
let resolvers = &opts.resolvers; let resolvers = &opts.resolvers;
let binary_name = match package_info.binaries.as_slice() { let binary_name = match package_info.binaries.as_slice() {
@ -119,19 +129,14 @@ async fn resolve_inner(
resolvers resolvers
.iter() .iter()
.cartesian_product(desired_targets.clone().into_iter().map( .cartesian_product(desired_targets.clone().into_iter().map(
|(triple, target)| { |(triple, target, target_meta)| {
debug!("Building metadata for target: {target}"); 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:?}"); debug!("Found metadata: {target_meta:?}");
Arc::new(TargetData { Arc::new(TargetData {
target: target.clone(), target: target.clone(),
meta: target_meta, meta: target_meta.clone(),
target_related_info: triple, target_related_info: triple,
}) })
}, },
@ -247,15 +252,10 @@ async fn resolve_inner(
return Err(BinstallError::NoFallbackToCargoInstall); return Err(BinstallError::NoFallbackToCargoInstall);
} }
let target_meta = if let Some((_, target)) = desired_targets.get(0) { let target_meta = desired_targets
package_info.meta.merge_overrides( .first()
iter::once(&opts.cli_overrides).chain(package_info.overrides.get(*target)), .map(|(_, _, target_meta)| target_meta)
) .unwrap_or(&meta);
} else {
package_info
.meta
.merge_overrides(iter::once(&opts.cli_overrides))
};
if let Some(disabled_strategies) = target_meta.disabled_strategies.as_deref() { if let Some(disabled_strategies) = target_meta.disabled_strategies.as_deref() {
if disabled_strategies.contains(&Strategy::Compile) { 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, name: package_info.name,
version: package_info.version_str, version: package_info.version_str,
})); }))
} }
/// * `fetcher` - `fetcher.find()` must have returned `Ok(true)`. /// * `fetcher` - `fetcher.find()` must have returned `Ok(true)`.