From 734e3b60b35c59a2e56394032bb2dc461bfb9f3c Mon Sep 17 00:00:00 2001 From: Konstantin Zudov Date: Sun, 11 Oct 2015 01:59:01 +0300 Subject: [PATCH] Group snapshot list using --- Handler/StackageHome.hs | 5 +++-- Stackage/Database/Types.hs | 22 +++++++++------------- templates/stackage-diff.hamlet | 34 ++++++++++++++++++++++++---------- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Handler/StackageHome.hs b/Handler/StackageHome.hs index 13977fe..6219564 100644 --- a/Handler/StackageHome.hs +++ b/Handler/StackageHome.hs @@ -11,7 +11,7 @@ import qualified Data.HashMap.Strict as HashMap import Data.These import Data.Time (FormatTime) import Stackage.Database -import Stackage.Database.Types (sortNicely, previousSnapName) +import Stackage.Database.Types (isLts, previousSnapName) import Stackage.Snapshot.Diff getStackageHomeR :: SnapName -> Handler Html @@ -32,7 +32,8 @@ getStackageDiffR :: SnapName -> SnapName -> Handler Html getStackageDiffR name1 name2 = do Entity sid1 s1 <- lookupSnapshot name1 >>= maybe notFound return Entity sid2 s2 <- lookupSnapshot name2 >>= maybe notFound return - snapNames <- sortNicely . map snapshotName . snd <$> getSnapshots 0 0 + snapNames <- map snapshotName . snd <$> getSnapshots 0 0 + let (ltsSnaps, nightlySnaps) = partition isLts $ reverse $ sort snapNames snapDiff <- getSnapshotDiff sid1 sid2 defaultLayout $ do setTitle $ "Compare " ++ toHtml (toPathPiece name1) ++ " with " diff --git a/Stackage/Database/Types.hs b/Stackage/Database/Types.hs index d9b246e..18c0a52 100644 --- a/Stackage/Database/Types.hs +++ b/Stackage/Database/Types.hs @@ -1,6 +1,7 @@ module Stackage.Database.Types ( SnapName (..) - , sortNicely + , isLts + , isNightly , previousSnapName ) where @@ -14,22 +15,17 @@ data SnapName = SNLts !Int !Int | SNNightly !Day deriving (Eq, Ord, Read, Show) -isLTS :: SnapName -> Bool -isLTS SNLts{} = True -isLTS SNNightly{} = False +isLts :: SnapName -> Bool +isLts SNLts{} = True +isLts SNNightly{} = False --- | Sorts a list of SnapName's in a way suitable for rendering a select list. --- Order: --- 1. LTS snapshots (recent first) --- 2. Nightly snapshots (recent first) --- 3. Anything else -sortNicely :: [SnapName] -> [SnapName] -sortNicely ns = reverse (sort lts) ++ reverse (sort nightly) - where (lts, nightly) = partition isLTS ns +isNightly :: SnapName -> Bool +isNightly SNLts{} = False +isNightly SNNightly{} = True previousSnapName :: [SnapName] -> SnapName -> SnapName previousSnapName ns n = - fromMaybe n $ maximumMay $ filter (< n) $ filter ((isLTS n ==) . isLTS) ns + fromMaybe n $ maximumMay $ filter (< n) $ filter ((isLts n ==) . isLts) ns instance PersistField SnapName where toPersistValue = toPersistValue . toPathPiece diff --git a/templates/stackage-diff.hamlet b/templates/stackage-diff.hamlet index dcc70f6..8d27d7f 100644 --- a/templates/stackage-diff.hamlet +++ b/templates/stackage-diff.hamlet @@ -6,18 +6,32 @@ - $forall name2' <- snapNames - $if name2' == name2 - + $forall name2' <- ltsSnaps + $if name2' == name2 + + $forall name2' <- nightlySnaps + $if name2' == name2 +