Support for "installed" core packages #68

This commit is contained in:
Michael Snoyman 2014-12-22 23:04:13 +02:00
parent b06424463e
commit 9d745c9c42
3 changed files with 27 additions and 13 deletions

View File

@ -88,10 +88,10 @@ getStackageMetadataR slug = do
, Asc PackageVersion , Asc PackageVersion
] $= mapC (Chunk . toBuilder . showPackage) ] $= mapC (Chunk . toBuilder . showPackage)
showPackage (Entity _ (Package _ name version _ _)) = concat showPackage (Entity _ p) = concat
[ toPathPiece name [ toPathPiece $ packageName' p
, "-" , "-"
, toPathPiece version , toPathPiece $ packageVersion p
, "\n" , "\n"
] ]
@ -128,17 +128,20 @@ getStackageCabalConfigR slug = do
toBuilder '\n' toBuilder '\n'
goFirst = do goFirst = do
mx <- await mx <- await
forM_ mx $ \(Entity _ (Package _ name version _ _)) -> yield $ Chunk $ forM_ mx $ \(Entity _ p) -> yield $ Chunk $
toBuilder (asText "constraints: ") ++ toBuilder (asText "constraints: ") ++
toBuilder (toPathPiece name) ++ toBuilder (toPathPiece $ packageName' p) ++
toBuilder (asText " ==") ++ constraint p
toBuilder (toPathPiece version)
showPackage (Entity _ (Package _ name version _ _)) = constraint p
| packageCore p = toBuilder $ asText " installed"
| otherwise = toBuilder (asText " ==") ++
toBuilder (toPathPiece $ packageVersion p)
showPackage (Entity _ p) =
toBuilder (asText ",\n ") ++ toBuilder (asText ",\n ") ++
toBuilder (toPathPiece name) ++ toBuilder (toPathPiece $ packageName' p) ++
toBuilder (asText " ==") ++ constraint p
toBuilder (toPathPiece version)
yearMonthDay :: FormatTime t => t -> String yearMonthDay :: FormatTime t => t -> String
yearMonthDay = formatTime defaultTimeLocale "%Y-%m-%d" yearMonthDay = formatTime defaultTimeLocale "%Y-%m-%d"

View File

@ -13,7 +13,7 @@ import qualified Data.Text as T
import Filesystem.Path (splitExtension) import Filesystem.Path (splitExtension)
import Data.BlobStore import Data.BlobStore
import Filesystem (createTree) import Filesystem (createTree)
import Control.Monad.State.Strict (execStateT, get, put) import Control.Monad.State.Strict (execStateT, get, put, modify)
import qualified Codec.Compression.GZip as GZip import qualified Codec.Compression.GZip as GZip
import Control.Monad.Trans.Resource (allocate) import Control.Monad.Trans.Resource (allocate)
import System.Directory (removeFile, getTemporaryDirectory) import System.Directory (removeFile, getTemporaryDirectory)
@ -127,12 +127,13 @@ putUploadStackageR = do
-- Evil lazy I/O thanks to tar package -- Evil lazy I/O thanks to tar package
lbs <- readFile $ fpFromString fp lbs <- readFile $ fpFromString fp
withSystemTempDirectory "build00index." $ \dir -> do withSystemTempDirectory "build00index." $ \dir -> do
LoopState _ stackage files _ contents <- execStateT (loop isAdmin update (Tar.read lbs)) LoopState LoopState _ stackage files _ contents cores <- execStateT (loop isAdmin update (Tar.read lbs)) LoopState
{ lsRoot = fpFromString dir { lsRoot = fpFromString dir
, lsStackage = initial , lsStackage = initial
, lsFiles = mempty , lsFiles = mempty
, lsIdent = ident , lsIdent = ident
, lsContents = [] , lsContents = []
, lsCores = mempty
} }
withSystemTempFile "newindex" $ \fp' h -> do withSystemTempFile "newindex" $ \fp' h -> do
ec <- liftIO $ do ec <- liftIO $ do
@ -155,6 +156,7 @@ putUploadStackageR = do
, packageVersion = version , packageVersion = version
, packageOverwrite = overwrite , packageOverwrite = overwrite
, packageHasHaddocks = False , packageHasHaddocks = False
, packageCore = name `member` cores
} }
setAlias setAlias
@ -215,6 +217,13 @@ putUploadStackageR = do
Just src -> addFile False name version src Just src -> addFile False name version src
Nothing -> return () Nothing -> return ()
"core" -> forM_ (lines $ decodeUtf8 $ toStrict lbs) $ \name ->
modify $ \ls -> ls
{ lsCores = insertSet (PackageName name)
$ lsCores ls
}
fp | (base1, Just "gz") <- splitExtension fp fp | (base1, Just "gz") <- splitExtension fp
, (fpToText -> base, Just "tar") <- splitExtension base1 -> do , (fpToText -> base, Just "tar") <- splitExtension base1 -> do
ident <- lsIdent <$> get ident <- lsIdent <$> get
@ -266,6 +275,7 @@ data LoopState = LoopState
, lsIdent :: !PackageSetIdent , lsIdent :: !PackageSetIdent
, lsContents :: ![(PackageName, Version, IsOverride)] -- FIXME use SnocVector when ready , lsContents :: ![(PackageName, Version, IsOverride)] -- FIXME use SnocVector when ready
, lsCores :: !(Set PackageName) -- ^ core packages
} }
type IsOverride = Bool type IsOverride = Bool

View File

@ -44,6 +44,7 @@ Package
version Version version Version
hasHaddocks Bool default=true hasHaddocks Bool default=true
overwrite Bool overwrite Bool
core Bool default=false
Tag Tag
package PackageName package PackageName