From a636ad3191ad6f21c2614d01120faf01e1ea576b Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Thu, 5 Feb 2026 16:39:37 -0700 Subject: [PATCH] fix: filter by target_version in get_matching_models and pass otherVersions from install --- core/src/install/mod.rs | 3 ++- core/src/registry/package/get.rs | 35 ++++++++++++++++---------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/core/src/install/mod.rs b/core/src/install/mod.rs index 5fe707463..9267be2d5 100644 --- a/core/src/install/mod.rs +++ b/core/src/install/mod.rs @@ -137,6 +137,7 @@ pub async fn install( json!({ "id": id, "targetVersion": VersionRange::exactly(version.deref().clone()), + "otherVersions": "none", }), RegistryUrlParams { registry: registry.clone(), @@ -484,7 +485,7 @@ pub async fn cli_install( let mut packages: GetPackageResponse = from_value( ctx.call_remote::( "package.get", - json!({ "id": &id, "targetVersion": version, "sourceVersion": source_version }), + json!({ "id": &id, "targetVersion": version, "sourceVersion": source_version, "otherVersions": "none" }), ) .await?, )?; diff --git a/core/src/registry/package/get.rs b/core/src/registry/package/get.rs index 04dfbf8d9..2d834bf87 100644 --- a/core/src/registry/package/get.rs +++ b/core/src/registry/package/get.rs @@ -151,6 +151,7 @@ fn get_matching_models( id, source_version, device_info, + target_version, .. }: &GetPackageParams, ) -> Result)>, Error> { @@ -169,26 +170,29 @@ fn get_matching_models( .as_entries()? .into_iter() .map(|(v, info)| { + let ev = ExtendedVersion::from(v); Ok::<_, Error>( - if source_version.as_ref().map_or(Ok(true), |source_version| { - Ok::<_, Error>( - source_version.satisfies( - &info - .as_source_version() - .de()? - .unwrap_or(VersionRange::any()), - ), - ) - })? { + if target_version.as_ref().map_or(true, |tv| ev.satisfies(tv)) + && source_version.as_ref().map_or(Ok(true), |source_version| { + Ok::<_, Error>( + source_version.satisfies( + &info + .as_source_version() + .de()? + .unwrap_or(VersionRange::any()), + ), + ) + })? + { let mut info = info.clone(); if let Some(device_info) = &device_info { if info.for_device(device_info)? { - Some((k.clone(), ExtendedVersion::from(v), info)) + Some((k.clone(), ev, info)) } else { None } } else { - Some((k.clone(), ExtendedVersion::from(v), info)) + Some((k.clone(), ev, info)) } } else { None @@ -211,12 +215,7 @@ pub async fn get_package(ctx: RegistryContext, params: GetPackageParams) -> Resu for (id, version, info) in get_matching_models(&peek.as_index().as_package(), ¶ms)? { let package_best = best.entry(id.clone()).or_default(); let package_other = other.entry(id.clone()).or_default(); - if params - .target_version - .as_ref() - .map_or(true, |v| version.satisfies(v)) - && package_best.keys().all(|k| !(**k > version)) - { + if package_best.keys().all(|k| !(**k > version)) { for worse_version in package_best .keys() .filter(|k| ***k < version)