From 89a1d72f3697bdb68c025939b75c8ea69bb7c20a Mon Sep 17 00:00:00 2001 From: Lucy Cifferello <12953208+elvece@users.noreply.github.com> Date: Tue, 30 Apr 2024 19:33:38 -0400 Subject: [PATCH] simplify getting dep metadata --- src/Handler/Package/V1/Index.hs | 20 +++++++++++++------- src/Handler/Util.hs | 3 ++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Handler/Package/V1/Index.hs b/src/Handler/Package/V1/Index.hs index 19c8fa4..f9b12d1 100644 --- a/src/Handler/Package/V1/Index.hs +++ b/src/Handler/Package/V1/Index.hs @@ -131,8 +131,6 @@ getPackageIndexR = do ram <- getRamQuery hardwareDevices <- getHardwareDevicesQuery communityVersion <- getsYesod $ communityVersion . appSettings - $logWarn $ "***COMMUNITY" - $logWarn $ show $ osPredicate communityVersion pkgIds <- getPkgIdsQuery category <- getCategoryQuery page <- fromMaybe 1 <$> getPageQuery @@ -170,7 +168,7 @@ getPackageIndexR = do .| sinkList -- NOTE: if a package's dependencies do not meet the system requirements, it is currently omitted from the list - pkgsWithDependencies <- runDB $ mapConcurrently (getPackageDependencies osPredicate) filteredPackages + pkgsWithDependencies <- runDB $ mapConcurrently getPackageDependencies filteredPackages PackageListRes <$> runConcurrently (zipWithM (Concurrently .* constructPackageListApiRes) filteredPackages pkgsWithDependencies) getPkgIdsQuery :: Handler (Maybe [PackageReq]) @@ -215,15 +213,14 @@ getRamQuery = parseQueryParam "hardware.ram" ((flip $ note . mappend "Invalid 'r getPackageDependencies :: (MonadIO m, MonadLogger m, MonadResource m, Has PkgRepo r, MonadReader r m) => - (Version -> Bool) -> PackageMetadata -> ReaderT SqlBackend m (HashMap PkgId DependencyRes) -getPackageDependencies osPredicate PackageMetadata{packageMetadataPkgId = pkg, packageMetadataPkgVersion = pkgVersion} = +getPackageDependencies PackageMetadata{packageMetadataPkgId = pkg, packageMetadataPkgVersion = pkgVersion} = do pkgDepInfo' <- getPkgDependencyData pkg pkgVersion let pkgDepInfo = fmap (\a -> (entityVal $ fst a, entityVal $ snd a)) pkgDepInfo' pkgDepInfoWithVersions <- traverse getDependencyVersions (fst <$> pkgDepInfo) - let depMetadata = zipWith (selectDependencyBestVersion osPredicate) pkgDepInfo pkgDepInfoWithVersions + let depMetadata = zipWith formatDependencyInfo pkgDepInfo pkgDepInfoWithVersions lift $ fmap HM.fromList $ for depMetadata $ \(depId, title, v, isLocal) -> do @@ -296,4 +293,13 @@ selectDependencyBestVersion osPredicate pkgDepInfo depVersions = do Just bestVersion -> (pkgId, versionRecordTitle bestVersion, versionRecordNumber bestVersion, isLocal) -- use latest version of dep for metadata info Nothing -> (pkgId, versionRecordTitle latestDepVersion, versionRecordNumber latestDepVersion, isLocal) - else (pkgId, versionRecordTitle latestDepVersion, versionRecordNumber latestDepVersion, isLocal) \ No newline at end of file + else (pkgId, versionRecordTitle latestDepVersion, versionRecordNumber latestDepVersion, isLocal) + +formatDependencyInfo :: (PkgDependency, PkgRecord) -> [VersionRecord] -> (PkgId, Text, Version, Bool) +formatDependencyInfo pkgDepInfo depVersions = do + let pkgDepRecord = fst pkgDepInfo + let isLocal = pkgRecordHidden $ snd pkgDepInfo + let depId = pkgDependencyDepId pkgDepRecord + let pkgId = unPkgRecordKey depId + let latestDepVersion = head $ sortOn (Down . versionRecordNumber) depVersions + (pkgId, versionRecordTitle latestDepVersion, versionRecordNumber latestDepVersion, isLocal) \ No newline at end of file diff --git a/src/Handler/Util.hs b/src/Handler/Util.hs index 9dbf430..f293223 100644 --- a/src/Handler/Util.hs +++ b/src/Handler/Util.hs @@ -101,6 +101,7 @@ import Settings (AppSettings(whitelist)) import Network.HTTP.Types (status200) import Database.Persist (insert_) import Yesod (lookupPostParam) +import Data.Maybe (isNothing) orThrow :: MonadHandler m => m (Maybe a) -> m a -> m a orThrow action other = @@ -240,7 +241,7 @@ getPkgArch = do filterDeprecatedVersions :: Version -> (Version -> Bool) -> [VersionRecord] -> [VersionRecord] filterDeprecatedVersions communityVersion osPredicate vrs = do if (osPredicate communityVersion) - then filter (\v -> not $ isJust $ versionRecordDeprecatedAt v) $ vrs + then filter (\v -> isNothing $ versionRecordDeprecatedAt v) $ vrs else vrs filterDevices :: (MonadUnliftIO m) => (MM.MultiMap Text Text) -> [(VersionRecord, VersionPlatform)] -> m [VersionRecord]