fix: filter by target_version in get_matching_models and pass otherVersions from install

This commit is contained in:
Aiden McClelland
2026-02-05 16:39:37 -07:00
parent c401156750
commit a636ad3191
2 changed files with 19 additions and 19 deletions

View File

@@ -137,6 +137,7 @@ pub async fn install(
json!({ json!({
"id": id, "id": id,
"targetVersion": VersionRange::exactly(version.deref().clone()), "targetVersion": VersionRange::exactly(version.deref().clone()),
"otherVersions": "none",
}), }),
RegistryUrlParams { RegistryUrlParams {
registry: registry.clone(), registry: registry.clone(),
@@ -484,7 +485,7 @@ pub async fn cli_install(
let mut packages: GetPackageResponse = from_value( let mut packages: GetPackageResponse = from_value(
ctx.call_remote::<RegistryContext>( ctx.call_remote::<RegistryContext>(
"package.get", "package.get",
json!({ "id": &id, "targetVersion": version, "sourceVersion": source_version }), json!({ "id": &id, "targetVersion": version, "sourceVersion": source_version, "otherVersions": "none" }),
) )
.await?, .await?,
)?; )?;

View File

@@ -151,6 +151,7 @@ fn get_matching_models(
id, id,
source_version, source_version,
device_info, device_info,
target_version,
.. ..
}: &GetPackageParams, }: &GetPackageParams,
) -> Result<Vec<(PackageId, ExtendedVersion, Model<PackageVersionInfo>)>, Error> { ) -> Result<Vec<(PackageId, ExtendedVersion, Model<PackageVersionInfo>)>, Error> {
@@ -169,8 +170,10 @@ fn get_matching_models(
.as_entries()? .as_entries()?
.into_iter() .into_iter()
.map(|(v, info)| { .map(|(v, info)| {
let ev = ExtendedVersion::from(v);
Ok::<_, Error>( Ok::<_, Error>(
if source_version.as_ref().map_or(Ok(true), |source_version| { if target_version.as_ref().map_or(true, |tv| ev.satisfies(tv))
&& source_version.as_ref().map_or(Ok(true), |source_version| {
Ok::<_, Error>( Ok::<_, Error>(
source_version.satisfies( source_version.satisfies(
&info &info
@@ -179,16 +182,17 @@ fn get_matching_models(
.unwrap_or(VersionRange::any()), .unwrap_or(VersionRange::any()),
), ),
) )
})? { })?
{
let mut info = info.clone(); let mut info = info.clone();
if let Some(device_info) = &device_info { if let Some(device_info) = &device_info {
if info.for_device(device_info)? { if info.for_device(device_info)? {
Some((k.clone(), ExtendedVersion::from(v), info)) Some((k.clone(), ev, info))
} else { } else {
None None
} }
} else { } else {
Some((k.clone(), ExtendedVersion::from(v), info)) Some((k.clone(), ev, info))
} }
} else { } else {
None 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(), &params)? { for (id, version, info) in get_matching_models(&peek.as_index().as_package(), &params)? {
let package_best = best.entry(id.clone()).or_default(); let package_best = best.entry(id.clone()).or_default();
let package_other = other.entry(id.clone()).or_default(); let package_other = other.entry(id.clone()).or_default();
if params if package_best.keys().all(|k| !(**k > version)) {
.target_version
.as_ref()
.map_or(true, |v| version.satisfies(v))
&& package_best.keys().all(|k| !(**k > version))
{
for worse_version in package_best for worse_version in package_best
.keys() .keys()
.filter(|k| ***k < version) .filter(|k| ***k < version)