mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-02-24 08:27:52 +01:00
GetStackageDatabase typeclass
This commit is contained in:
parent
f08978fadf
commit
7758078625
@ -275,5 +275,7 @@ getExtra = fmap (appExtra . settings) getYesod
|
|||||||
--
|
--
|
||||||
-- https://github.com/yesodweb/yesod/wiki/Sending-email
|
-- https://github.com/yesodweb/yesod/wiki/Sending-email
|
||||||
|
|
||||||
getStackageDatabase :: Handler StackageDatabase
|
instance GetStackageDatabase Handler where
|
||||||
getStackageDatabase = getYesod >>= readIORef . stackageDatabase
|
getStackageDatabase = getYesod >>= readIORef . stackageDatabase
|
||||||
|
instance GetStackageDatabase (WidgetT App IO) where
|
||||||
|
getStackageDatabase = getYesod >>= readIORef . stackageDatabase
|
||||||
|
|||||||
@ -24,35 +24,32 @@ parseLtsSuffix t0 = do
|
|||||||
|
|
||||||
getOldLtsR :: [Text] -> Handler ()
|
getOldLtsR :: [Text] -> Handler ()
|
||||||
getOldLtsR pieces = do
|
getOldLtsR pieces = do
|
||||||
db <- getStackageDatabase
|
|
||||||
(x, y, pieces') <- case pieces of
|
(x, y, pieces') <- case pieces of
|
||||||
t:ts | Just suffix <- parseLtsSuffix t -> do
|
t:ts | Just suffix <- parseLtsSuffix t -> do
|
||||||
(x, y) <- case suffix of
|
(x, y) <- case suffix of
|
||||||
LSMajor x -> do
|
LSMajor x -> do
|
||||||
y <- newestLTSMajor db x >>= maybe notFound return
|
y <- newestLTSMajor x >>= maybe notFound return
|
||||||
return (x, y)
|
return (x, y)
|
||||||
LSMinor x y -> return (x, y)
|
LSMinor x y -> return (x, y)
|
||||||
return (x, y, ts)
|
return (x, y, ts)
|
||||||
_ -> do
|
_ -> do
|
||||||
(x, y) <- newestLTS db >>= maybe notFound return
|
(x, y) <- newestLTS >>= maybe notFound return
|
||||||
return (x, y, pieces)
|
return (x, y, pieces)
|
||||||
let name = concat ["lts-", tshow x, ".", tshow y]
|
let name = concat ["lts-", tshow x, ".", tshow y]
|
||||||
redirect $ concatMap (cons '/') $ name : pieces'
|
redirect $ concatMap (cons '/') $ name : pieces'
|
||||||
|
|
||||||
getOldLtsMajorR :: LtsMajor -> [Text] -> Handler ()
|
getOldLtsMajorR :: LtsMajor -> [Text] -> Handler ()
|
||||||
getOldLtsMajorR (LtsMajor x) pieces = do
|
getOldLtsMajorR (LtsMajor x) pieces = do
|
||||||
db <- getStackageDatabase
|
y <- newestLTSMajor x >>= maybe notFound return
|
||||||
y <- newestLTSMajor db x >>= maybe notFound return
|
|
||||||
let name = concat ["lts-", tshow x, ".", tshow y]
|
let name = concat ["lts-", tshow x, ".", tshow y]
|
||||||
redirect $ concatMap (cons '/') $ name : pieces
|
redirect $ concatMap (cons '/') $ name : pieces
|
||||||
|
|
||||||
getOldNightlyR :: [Text] -> Handler ()
|
getOldNightlyR :: [Text] -> Handler ()
|
||||||
getOldNightlyR pieces = do
|
getOldNightlyR pieces = do
|
||||||
db <- getStackageDatabase
|
|
||||||
(day, pieces') <- case pieces of
|
(day, pieces') <- case pieces of
|
||||||
t:ts | Just day <- fromPathPiece t -> return (day, ts)
|
t:ts | Just day <- fromPathPiece t -> return (day, ts)
|
||||||
_ -> do
|
_ -> do
|
||||||
day <- newestNightly db >>= maybe notFound return
|
day <- newestNightly >>= maybe notFound return
|
||||||
return (day, pieces)
|
return (day, pieces)
|
||||||
let name = "nightly-" ++ tshow day
|
let name = "nightly-" ++ tshow day
|
||||||
redirect $ concatMap (cons '/') $ name : pieces'
|
redirect $ concatMap (cons '/') $ name : pieces'
|
||||||
|
|||||||
@ -12,8 +12,7 @@ import Stackage.Database
|
|||||||
|
|
||||||
getStackageHomeR :: SnapName -> Handler Html
|
getStackageHomeR :: SnapName -> Handler Html
|
||||||
getStackageHomeR name = do
|
getStackageHomeR name = do
|
||||||
db <- getStackageDatabase
|
Entity sid snapshot <- lookupSnapshot name >>= maybe notFound return
|
||||||
Entity sid snapshot <- lookupSnapshot db name >>= maybe notFound return
|
|
||||||
|
|
||||||
let hoogleForm =
|
let hoogleForm =
|
||||||
let queryText = "" :: Text
|
let queryText = "" :: Text
|
||||||
@ -21,7 +20,7 @@ getStackageHomeR name = do
|
|||||||
in $(widgetFile "hoogle-form")
|
in $(widgetFile "hoogle-form")
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle $ toHtml $ snapshotTitle snapshot
|
setTitle $ toHtml $ snapshotTitle snapshot
|
||||||
packages <- getPackages db sid
|
packages <- getPackages sid
|
||||||
$(widgetFile "stackage-home")
|
$(widgetFile "stackage-home")
|
||||||
where strip x = fromMaybe x (stripSuffix "." x)
|
where strip x = fromMaybe x (stripSuffix "." x)
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
module Stackage.Database
|
module Stackage.Database
|
||||||
( StackageDatabase
|
( StackageDatabase
|
||||||
|
, GetStackageDatabase (..)
|
||||||
, SnapName (..)
|
, SnapName (..)
|
||||||
, Snapshot (..)
|
, Snapshot (..)
|
||||||
, loadStackageDatabase
|
, loadStackageDatabase
|
||||||
@ -60,6 +61,9 @@ SnapshotPackage
|
|||||||
|
|
||||||
newtype StackageDatabase = StackageDatabase ConnectionPool
|
newtype StackageDatabase = StackageDatabase ConnectionPool
|
||||||
|
|
||||||
|
class MonadIO m => GetStackageDatabase m where
|
||||||
|
getStackageDatabase :: m StackageDatabase
|
||||||
|
|
||||||
sourceBuildPlans :: MonadResource m => Producer m (SnapName, BuildPlan)
|
sourceBuildPlans :: MonadResource m => Producer m (SnapName, BuildPlan)
|
||||||
sourceBuildPlans = do
|
sourceBuildPlans = do
|
||||||
root <- liftIO $ fmap (</> "database") $ fmap fpFromString $ getAppUserDataDirectory "stackage"
|
root <- liftIO $ fmap (</> "database") $ fmap fpFromString $ getAppUserDataDirectory "stackage"
|
||||||
@ -147,25 +151,28 @@ addPlan (name, bp) = do
|
|||||||
$ fmap (, True) (siCorePackages $ bpSystemInfo bp)
|
$ fmap (, True) (siCorePackages $ bpSystemInfo bp)
|
||||||
++ fmap ((, False) . ppVersion) (bpPackages bp)
|
++ fmap ((, False) . ppVersion) (bpPackages bp)
|
||||||
|
|
||||||
run :: MonadIO m => StackageDatabase -> SqlPersistT IO a -> m a
|
|
||||||
run (StackageDatabase pool) inner = liftIO $ runSqlPool inner pool
|
|
||||||
|
|
||||||
newestLTS :: MonadIO m => StackageDatabase -> m (Maybe (Int, Int))
|
run :: GetStackageDatabase m => SqlPersistT IO a -> m a
|
||||||
newestLTS db =
|
run inner = do
|
||||||
run db $ liftM (fmap go) $ selectFirst [] [Desc LtsMajor, Desc LtsMinor]
|
StackageDatabase pool <- getStackageDatabase
|
||||||
|
liftIO $ runSqlPool inner pool
|
||||||
|
|
||||||
|
newestLTS :: GetStackageDatabase m => m (Maybe (Int, Int))
|
||||||
|
newestLTS =
|
||||||
|
run $ liftM (fmap go) $ selectFirst [] [Desc LtsMajor, Desc LtsMinor]
|
||||||
where
|
where
|
||||||
go (Entity _ lts) = (ltsMajor lts, ltsMinor lts)
|
go (Entity _ lts) = (ltsMajor lts, ltsMinor lts)
|
||||||
|
|
||||||
newestLTSMajor :: MonadIO m => StackageDatabase -> Int -> m (Maybe Int)
|
newestLTSMajor :: GetStackageDatabase m => Int -> m (Maybe Int)
|
||||||
newestLTSMajor db x =
|
newestLTSMajor x =
|
||||||
run db $ liftM (fmap $ ltsMinor . entityVal) $ selectFirst [LtsMajor ==. x] [Desc LtsMinor]
|
run $ liftM (fmap $ ltsMinor . entityVal) $ selectFirst [LtsMajor ==. x] [Desc LtsMinor]
|
||||||
|
|
||||||
newestNightly :: MonadIO m => StackageDatabase -> m (Maybe Day)
|
newestNightly :: GetStackageDatabase m => m (Maybe Day)
|
||||||
newestNightly db =
|
newestNightly =
|
||||||
run db $ liftM (fmap $ nightlyDay . entityVal) $ selectFirst [] [Desc NightlyDay]
|
run $ liftM (fmap $ nightlyDay . entityVal) $ selectFirst [] [Desc NightlyDay]
|
||||||
|
|
||||||
lookupSnapshot :: MonadIO m => StackageDatabase -> SnapName -> m (Maybe (Entity Snapshot))
|
lookupSnapshot :: GetStackageDatabase m => SnapName -> m (Maybe (Entity Snapshot))
|
||||||
lookupSnapshot db name = run db $ getBy $ UniqueSnapshot name
|
lookupSnapshot name = run $ getBy $ UniqueSnapshot name
|
||||||
|
|
||||||
snapshotTitle :: Snapshot -> Text
|
snapshotTitle :: Snapshot -> Text
|
||||||
snapshotTitle s =
|
snapshotTitle s =
|
||||||
@ -182,8 +189,8 @@ data PackageListingInfo = PackageListingInfo
|
|||||||
, pliSynopsis :: !Text
|
, pliSynopsis :: !Text
|
||||||
}
|
}
|
||||||
|
|
||||||
getPackages :: MonadIO m => StackageDatabase -> SnapshotId -> m [PackageListingInfo]
|
getPackages :: GetStackageDatabase m => SnapshotId -> m [PackageListingInfo]
|
||||||
getPackages db sid = liftM (map toPLI) $ run db $ do
|
getPackages sid = liftM (map toPLI) $ run $ do
|
||||||
E.select $ E.from $ \(p,sp) -> do
|
E.select $ E.from $ \(p,sp) -> do
|
||||||
E.where_ $
|
E.where_ $
|
||||||
(p E.^. PackageId E.==. sp E.^. SnapshotPackagePackage) E.&&.
|
(p E.^. PackageId E.==. sp E.^. SnapshotPackagePackage) E.&&.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user