git.iko.soy/typeable/cabal2nix
on master help sign in
hackage2nix: re-implement consistency checks for Configuration type
commitaf13b6a740d4d4cd382b2de2898785890565205e authorPeter Simons <simons@cryp.to> dateTue 8 Sep 2015, 12:18 (11 years ago) parent2e1eab1
3 files changed+20−9
distribution-nixpkgs/test/Main.hs−6 hackage2nix/src/Configuration.hs+19−1 hackage2nix/src/Main.hs+1−2
distribution-nixpkgs/test/Main.hs−6
@@ -24,11 +24,5 @@ main = do
2424 , nullMeta & broken .~ undefined
2525 ]
2626
27− -- TODO: migrate this test to hackage2nix!!
28− --
29− -- describe "Configuration records are consistent" $
30− -- it "No maintained package is marked as \"dont-distribute\"" $
31− -- Map.keysSet (packageMaintainers ghc7102) `Set.intersection` Map.keysSet (dontDistributePackages ghc7102) `shouldSatisfy` Set.null
32−
3327hitsBottom :: NFData a => a -> Expectation
3428hitsBottom x = evaluate (rnf x) `shouldThrow` anyErrorCall
hackage2nix/src/Configuration.hs+19−1
@@ -1,11 +1,13 @@
1+{-# LANGUAGE RecordWildCards #-}
12{-# LANGUAGE OverloadedStrings #-}
23{-# LANGUAGE DeriveGeneric #-}
34{-# OPTIONS_GHC -fno-warn-orphans #-}
45
5−module Configuration ( Configuration(..) ) where
6+module Configuration ( Configuration(..), readConfiguration, assertConsistency ) where
67
78import Control.DeepSeq.Generics
89import Control.Lens
10+import Control.Monad
911import Data.Map as Map
1012import Data.Set as Set
1113import Data.Text as T
@@ -66,3 +68,19 @@ instance (Ord k, FromJSON k, FromJSON v) => FromJSON (Map k v) where
6668 where
6769 parseKey :: FromJSON k => Text -> k
6870 parseKey s = either error id (parseEither parseJSON (String s))
71+
72+readConfiguration :: FilePath -> IO Configuration
73+readConfiguration path =
74+ decodeFile path >>= maybe (fail ("invalid config file at " ++ show path)) assertConsistency
75+
76+assertConsistency :: Monad m => Configuration -> m Configuration
77+assertConsistency cfg@(Configuration {..}) = do
78+ let report msg = fail ("*** configuration error: " ++ msg)
79+
80+ maintainedPackages = Set.unions (Map.elems packageMaintainers)
81+ disabledPackages = Map.keysSet dontDistributePackages
82+ disabledMaintainedPackages = maintainedPackages `Set.intersection` disabledPackages
83+ when (not (Set.null disabledMaintainedPackages)) $
84+ report ("disabled packages that have a maintainer: " ++ show disabledMaintainedPackages)
85+
86+ return cfg
hackage2nix/src/Main.hs+1−2
@@ -17,7 +17,6 @@ import Data.Monoid
1717import Data.Set ( Set )
1818import qualified Data.Set as Set
1919import Data.String
20−import Data.Yaml ( decodeFile )
2120import Distribution.Nixpkgs.Fetch
2221import Distribution.Nixpkgs.Haskell
2322import Distribution.Nixpkgs.Haskell.Constraint
@@ -81,7 +80,7 @@ main :: IO ()
8180main = do
8281 Options {..} <- execParser pinfo
8382
84− defaultConfiguration <- fromMaybe (error ("invalid config file at " ++ show configFile)) <$> decodeFile configFile
83+ defaultConfiguration <- readConfiguration configFile
8584 hackage <- readHackage hackageRepository
8685 nixpkgs <- readNixpkgPackageMap nixpkgsRepository Nothing
8786 preferredVersions <- readPreferredVersions (fromMaybe (hackageRepository </> "preferred-versions") preferredVersionsFile)