From 7c98f3e5f0aa4dce80ba0468159d5c3174a33893 Mon Sep 17 00:00:00 2001 From: a dinosaur Date: Thu, 10 Jul 2025 04:09:24 +1000 Subject: [PATCH] Resolve highest priority package provider --- Sources/apk/Index/ApkIndex.swift | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Sources/apk/Index/ApkIndex.swift b/Sources/apk/Index/ApkIndex.swift index 845b87c..07258f7 100644 --- a/Sources/apk/Index/ApkIndex.swift +++ b/Sources/apk/Index/ApkIndex.swift @@ -24,17 +24,24 @@ public extension ApkIndex { } func resolve(requirement: ApkVersionRequirement) -> ApkIndexPackage? { - self.packages.first { pkg in - return (pkg.name == requirement.name && requirement.versionSpec.satisfied(by: pkg.version)) + self.packages.filter { pkg in + (pkg.name == requirement.name && requirement.versionSpec.satisfied(by: pkg.version)) || pkg.provides.contains(where: { $0.satisfies(requirement) }) - } + }.max() } func resolveIndex(requirement: ApkVersionRequirement) -> Index? { - self.packages.firstIndex { pkg in + self.packages.enumerated().lazy.filter { index, pkg in return (pkg.name == requirement.name && requirement.versionSpec.satisfied(by: pkg.version)) || pkg.provides.contains(where: { $0.satisfies(requirement) }) - } + }.max { $0.element < $1.element }?.offset + } +} + +extension ApkIndexPackage: Comparable { + public static func < (lhs: Self, rhs: Self) -> Bool { + // Prefer highest declared provider priority + lhs.providerPriority ?? 0 < rhs.providerPriority ?? 0 } }