mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-29 04:10:24 +01:00
Show snapshot diff on feed
This commit is contained in:
parent
e74080d5c8
commit
fcc36a3a81
@ -2,15 +2,20 @@ module Handler.Feed where
|
|||||||
|
|
||||||
import Import
|
import Import
|
||||||
import Stackage.Database
|
import Stackage.Database
|
||||||
|
import Data.These
|
||||||
|
import Stackage.Snapshot.Diff
|
||||||
|
import qualified Data.HashMap.Strict as HashMap
|
||||||
|
|
||||||
getFeedR :: Handler TypedContent
|
getFeedR :: Handler TypedContent
|
||||||
getFeedR = do
|
getFeedR = do
|
||||||
(_, snaps) <- getSnapshots 20 0
|
(_, snaps) <- getSnapshots 20 0
|
||||||
let entries = flip map snaps $ \snap -> FeedEntry
|
entries <- forM snaps $ \(Entity snapid snap) -> do
|
||||||
|
content <- getContent snapid snap
|
||||||
|
return FeedEntry
|
||||||
{ feedEntryLink = SnapshotR (snapshotName snap) StackageHomeR
|
{ feedEntryLink = SnapshotR (snapshotName snap) StackageHomeR
|
||||||
, feedEntryUpdated = UTCTime (snapshotCreated snap) 0
|
, feedEntryUpdated = UTCTime (snapshotCreated snap) 0
|
||||||
, feedEntryTitle = prettyName (snapshotName snap) (snapshotGhc snap)
|
, feedEntryTitle = prettyName (snapshotName snap) (snapshotGhc snap)
|
||||||
, feedEntryContent = ""
|
, feedEntryContent = content
|
||||||
}
|
}
|
||||||
updated <-
|
updated <-
|
||||||
case entries of
|
case entries of
|
||||||
@ -26,3 +31,38 @@ getFeedR = do
|
|||||||
, feedUpdated = updated
|
, feedUpdated = updated
|
||||||
, feedEntries = entries
|
, feedEntries = entries
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getContent :: SnapshotId -> Snapshot -> Handler Html
|
||||||
|
getContent sid2 snap = do
|
||||||
|
mprev <-
|
||||||
|
case snapshotName snap of
|
||||||
|
SNLts x y -> ltsBefore x y
|
||||||
|
SNNightly day -> nightlyBefore day
|
||||||
|
case mprev of
|
||||||
|
Nothing -> return "No previous snapshot found for comparison"
|
||||||
|
Just (sid1, name1) -> do
|
||||||
|
snapDiff <- getSnapshotDiff sid1 sid2
|
||||||
|
return
|
||||||
|
[shamlet|
|
||||||
|
<p>Difference between #{prettyNameShort name1} and #{prettyNameShort $ snapshotName snap}
|
||||||
|
<table border=1 cellpadding=5>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th align=right>Package name
|
||||||
|
<th align=right>Old
|
||||||
|
<th align=left>New
|
||||||
|
<tbody>
|
||||||
|
$forall (name, VersionChange verChange) <- sortOn (toCaseFold . fst) $ HashMap.toList snapDiff
|
||||||
|
<tr>
|
||||||
|
<th align=right>#{name}
|
||||||
|
$case verChange
|
||||||
|
$of This oldVersion
|
||||||
|
<td align=right>#{oldVersion}
|
||||||
|
<td>
|
||||||
|
$of That newVersion
|
||||||
|
<td align=right>
|
||||||
|
<td>#{newVersion}
|
||||||
|
$of These oldVersion newVersion
|
||||||
|
<td align=right>#{oldVersion}
|
||||||
|
<td>#{newVersion}
|
||||||
|
|]
|
||||||
|
|||||||
@ -24,7 +24,7 @@ getAllSnapshotsR = do
|
|||||||
currentPageMay <- lookupGetParam "page"
|
currentPageMay <- lookupGetParam "page"
|
||||||
let currentPage :: Int
|
let currentPage :: Int
|
||||||
currentPage = fromMaybe 1 (currentPageMay >>= readMay)
|
currentPage = fromMaybe 1 (currentPageMay >>= readMay)
|
||||||
(totalCount, snapshots) <- getSnapshots
|
(totalCount, map entityVal -> snapshots) <- getSnapshots
|
||||||
snapshotsPerPage
|
snapshotsPerPage
|
||||||
((fromIntegral currentPage - 1) * snapshotsPerPage)
|
((fromIntegral currentPage - 1) * snapshotsPerPage)
|
||||||
let groups = groupUp now' snapshots
|
let groups = groupUp now' snapshots
|
||||||
|
|||||||
@ -17,7 +17,7 @@ import Stackage.Snapshot.Diff
|
|||||||
getStackageHomeR :: SnapName -> Handler Html
|
getStackageHomeR :: SnapName -> Handler Html
|
||||||
getStackageHomeR name = do
|
getStackageHomeR name = do
|
||||||
Entity sid snapshot <- lookupSnapshot name >>= maybe notFound return
|
Entity sid snapshot <- lookupSnapshot name >>= maybe notFound return
|
||||||
snapNames <- map snapshotName . snd <$> getSnapshots 0 0
|
snapNames <- map (snapshotName . entityVal) . snd <$> getSnapshots 0 0
|
||||||
let hoogleForm =
|
let hoogleForm =
|
||||||
let queryText = "" :: Text
|
let queryText = "" :: Text
|
||||||
exact = False
|
exact = False
|
||||||
@ -32,7 +32,7 @@ getStackageDiffR :: SnapName -> SnapName -> Handler Html
|
|||||||
getStackageDiffR name1 name2 = do
|
getStackageDiffR name1 name2 = do
|
||||||
Entity sid1 _ <- lookupSnapshot name1 >>= maybe notFound return
|
Entity sid1 _ <- lookupSnapshot name1 >>= maybe notFound return
|
||||||
Entity sid2 _ <- lookupSnapshot name2 >>= maybe notFound return
|
Entity sid2 _ <- lookupSnapshot name2 >>= maybe notFound return
|
||||||
snapNames <- map snapshotName . snd <$> getSnapshots 0 0
|
snapNames <- map (snapshotName . entityVal) . snd <$> getSnapshots 0 0
|
||||||
let (ltsSnaps, nightlySnaps) = partition isLts $ reverse $ sort snapNames
|
let (ltsSnaps, nightlySnaps) = partition isLts $ reverse $ sort snapNames
|
||||||
snapDiff <- getSnapshotDiff sid1 sid2
|
snapDiff <- getSnapshotDiff sid1 sid2
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
|
|||||||
@ -8,6 +8,8 @@ module Stackage.Database
|
|||||||
, newestLTSMajor
|
, newestLTSMajor
|
||||||
, ltsMajorVersions
|
, ltsMajorVersions
|
||||||
, newestNightly
|
, newestNightly
|
||||||
|
, nightlyBefore
|
||||||
|
, ltsBefore
|
||||||
, lookupSnapshot
|
, lookupSnapshot
|
||||||
, snapshotTitle
|
, snapshotTitle
|
||||||
, PackageListingInfo (..)
|
, PackageListingInfo (..)
|
||||||
@ -28,6 +30,7 @@ module Stackage.Database
|
|||||||
, Package (..)
|
, Package (..)
|
||||||
, getPackage
|
, getPackage
|
||||||
, prettyName
|
, prettyName
|
||||||
|
, prettyNameShort
|
||||||
, getSnapshotsForPackage
|
, getSnapshotsForPackage
|
||||||
, getSnapshots
|
, getSnapshots
|
||||||
, currentSchema
|
, currentSchema
|
||||||
@ -422,6 +425,22 @@ newestNightly :: GetStackageDatabase m => m (Maybe Day)
|
|||||||
newestNightly =
|
newestNightly =
|
||||||
run $ liftM (fmap $ nightlyDay . entityVal) $ selectFirst [] [Desc NightlyDay]
|
run $ liftM (fmap $ nightlyDay . entityVal) $ selectFirst [] [Desc NightlyDay]
|
||||||
|
|
||||||
|
nightlyBefore :: GetStackageDatabase m => Day -> m (Maybe (SnapshotId, SnapName))
|
||||||
|
nightlyBefore day = do
|
||||||
|
run $ liftM (fmap go) $ selectFirst [NightlyDay <. day] [Desc NightlyDay]
|
||||||
|
where
|
||||||
|
go (Entity _ nightly) = (nightlySnap nightly, SNNightly $ nightlyDay nightly)
|
||||||
|
|
||||||
|
ltsBefore :: GetStackageDatabase m => Int -> Int -> m (Maybe (SnapshotId, SnapName))
|
||||||
|
ltsBefore x y = do
|
||||||
|
run $ liftM (fmap go) $ selectFirst
|
||||||
|
( [LtsMajor <=. x, LtsMinor <. y] ||.
|
||||||
|
[LtsMajor <. x]
|
||||||
|
)
|
||||||
|
[Desc LtsMajor, Desc LtsMinor]
|
||||||
|
where
|
||||||
|
go (Entity _ lts) = (ltsSnap lts, SNLts (ltsMajor lts) (ltsMinor lts))
|
||||||
|
|
||||||
lookupSnapshot :: GetStackageDatabase m => SnapName -> m (Maybe (Entity Snapshot))
|
lookupSnapshot :: GetStackageDatabase m => SnapName -> m (Maybe (Entity Snapshot))
|
||||||
lookupSnapshot name = run $ getBy $ UniqueSnapshot name
|
lookupSnapshot name = run $ getBy $ UniqueSnapshot name
|
||||||
|
|
||||||
@ -429,13 +448,13 @@ snapshotTitle :: Snapshot -> Text
|
|||||||
snapshotTitle s = prettyName (snapshotName s) (snapshotGhc s)
|
snapshotTitle s = prettyName (snapshotName s) (snapshotGhc s)
|
||||||
|
|
||||||
prettyName :: SnapName -> Text -> Text
|
prettyName :: SnapName -> Text -> Text
|
||||||
prettyName name ghc =
|
prettyName name ghc = concat [prettyNameShort name, " - GHC ", ghc]
|
||||||
concat [base, " - GHC ", ghc]
|
|
||||||
where
|
prettyNameShort :: SnapName -> Text
|
||||||
base =
|
prettyNameShort name =
|
||||||
case name of
|
case name of
|
||||||
SNLts x y -> concat ["LTS Haskell ", tshow x, ".", tshow y]
|
SNLts x y -> concat ["LTS Haskell ", tshow x, ".", tshow y]
|
||||||
SNNightly d -> "Stackage Nightly " ++ tshow d
|
SNNightly d -> "Stackage Nightly " ++ tshow d
|
||||||
|
|
||||||
getAllPackages :: GetStackageDatabase m => m [(Text, Text, Text)] -- FIXME add information on whether included in LTS and Nightly
|
getAllPackages :: GetStackageDatabase m => m [(Text, Text, Text)] -- FIXME add information on whether included in LTS and Nightly
|
||||||
getAllPackages = liftM (map toPair) $ run $ do
|
getAllPackages = liftM (map toPair) $ run $ do
|
||||||
@ -640,12 +659,12 @@ getSnapshots
|
|||||||
:: GetStackageDatabase m
|
:: GetStackageDatabase m
|
||||||
=> Int -- ^ limit
|
=> Int -- ^ limit
|
||||||
-> Int -- ^ offset
|
-> Int -- ^ offset
|
||||||
-> m (Int, [Snapshot])
|
-> m (Int, [Entity Snapshot])
|
||||||
getSnapshots l o = run $ (,)
|
getSnapshots l o = run $ (,)
|
||||||
<$> count ([] :: [Filter Snapshot])
|
<$> count ([] :: [Filter Snapshot])
|
||||||
<*> fmap (map entityVal) (selectList
|
<*> selectList
|
||||||
[]
|
[]
|
||||||
[LimitTo l, OffsetBy o, Desc SnapshotCreated])
|
[LimitTo l, OffsetBy o, Desc SnapshotCreated]
|
||||||
|
|
||||||
last5Lts5Nightly :: GetStackageDatabase m => m [SnapName]
|
last5Lts5Nightly :: GetStackageDatabase m => m [SnapName]
|
||||||
last5Lts5Nightly = run $ do
|
last5Lts5Nightly = run $ do
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user