mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 02:11:53 +00:00
fix: filter by target_version in get_matching_models and pass otherVersions from install
This commit is contained in:
@@ -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?,
|
||||||
)?;
|
)?;
|
||||||
|
|||||||
@@ -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,26 +170,29 @@ 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))
|
||||||
Ok::<_, Error>(
|
&& source_version.as_ref().map_or(Ok(true), |source_version| {
|
||||||
source_version.satisfies(
|
Ok::<_, Error>(
|
||||||
&info
|
source_version.satisfies(
|
||||||
.as_source_version()
|
&info
|
||||||
.de()?
|
.as_source_version()
|
||||||
.unwrap_or(VersionRange::any()),
|
.de()?
|
||||||
),
|
.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(), ¶ms)? {
|
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_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)
|
||||||
|
|||||||
Reference in New Issue
Block a user