mirror of
https://github.com/Start9Labs/registry.git
synced 2026-03-26 02:11:53 +00:00
filter packages for os compatibility before fetching metadata (#117)
* filter packages for os compatibility before fetching metadata * address PR feedback and add os filtering to get package latest version endpoint * additional test suite data * filter empty version sets * attempt to fix leak Co-authored-by: Keagan McClelland <keagan.mcclelland@gmail.com>
This commit is contained in:
@@ -68,22 +68,24 @@ import Database.Persist.Sql (
|
||||
import Database.PostgreSQL.Simple (SqlError (sqlState))
|
||||
import Lib.Error (S9Error (NotFoundE))
|
||||
import Lib.External.AppMgr qualified as AppMgr
|
||||
import Lib.Types.Core (
|
||||
PkgId (..),
|
||||
)
|
||||
import Lib.Types.Core (PkgId (..))
|
||||
import Lib.Types.Emver (
|
||||
Version,
|
||||
VersionRange,
|
||||
parseVersion,
|
||||
satisfies,
|
||||
)
|
||||
import Lib.Types.Manifest (PackageDependency (..), PackageManifest (..))
|
||||
import Lib.Types.Manifest (
|
||||
PackageDependency (..),
|
||||
PackageManifest (..),
|
||||
)
|
||||
import Model (
|
||||
EntityField (EosHashHash, PkgRecordUpdatedAt),
|
||||
EosHash (EosHash),
|
||||
Key (PkgRecordKey),
|
||||
PkgDependency (PkgDependency),
|
||||
PkgRecord (PkgRecord),
|
||||
VersionRecord (versionRecordNumber),
|
||||
)
|
||||
import Startlude (
|
||||
Bool (..),
|
||||
@@ -208,17 +210,16 @@ getVersionsFor pkg = do
|
||||
else pure []
|
||||
|
||||
|
||||
getViableVersions :: (MonadIO m, MonadReader r m, Has PkgRepo r, MonadLogger m) => PkgId -> VersionRange -> m [Version]
|
||||
getViableVersions pkg spec = filter (`satisfies` spec) <$> getVersionsFor pkg
|
||||
getViableVersions :: VersionRange -> [VersionRecord] -> [Version]
|
||||
getViableVersions spec vrs = filter (`satisfies` spec) (versionRecordNumber <$> vrs)
|
||||
|
||||
|
||||
getBestVersion ::
|
||||
(MonadIO m, MonadReader r m, Has PkgRepo r, MonadLogger m) =>
|
||||
PkgId ->
|
||||
VersionRange ->
|
||||
Bool ->
|
||||
m (Maybe Version)
|
||||
getBestVersion pkg spec preferMin = headMay . sortBy comparator <$> getViableVersions pkg spec
|
||||
[VersionRecord] ->
|
||||
(Maybe Version)
|
||||
getBestVersion spec preferMin vrs = headMay $ sortBy comparator $ getViableVersions spec vrs
|
||||
where
|
||||
comparator = if preferMin then compare else compare `on` Down
|
||||
|
||||
|
||||
Reference in New Issue
Block a user