git.iko.soy/typeable/cabal2nix
on master help sign in
hackage2nix: produce deterministic albeit sub-optimal output

Every time two LTS versions specify different flags for the same package, we have to chose either setting, because we cannot easily customize our output for both uses cases. This patch makes sure our output isn't random by choosing on the side of caution, i.e. we disable tests and Haddocks if any LTS version does so for that particular version of the package.

commit78165eea0c8f2ed27eaa10e726bbc4043c9e8cf1 authorPeter Simons <simons@cryp.to> dateSat 19 Sep 2015, 22:15 (11 years ago) parentc9511fd
2 files changed+15−7
hackage2nix/src/Main.hs+2−2 hackage2nix/src/Stackage.hs+13−5
hackage2nix/src/Main.hs+2−2
@@ -115,7 +115,7 @@ main = do
115115 [ Map.singleton name (Set.singleton (resolveConstraint c hackage)) | c@(Dependency name _) <- extraPackages config ]
116116
117117 stackagePackageSet :: Map PackageName (Map Version Spec)
118− stackagePackageSet = Map.fromListWith Map.union [ (n, Map.singleton (Stackage.version spec) spec) | snapshot <- nightly:snapshots, (n, spec) <- Map.toList (packages snapshot) ]
118+ stackagePackageSet = Map.fromListWith (Map.unionWith mergeSpecs) [ (n, Map.singleton (Stackage.version spec) spec) | snapshot <- nightly:snapshots, (n, spec) <- Map.toList (packages snapshot) ]
119119
120120 db :: PackageMultiSet
121121 db = Map.unionsWith Set.union [ Map.map Set.singleton generatedDefaultPackageSet
@@ -153,7 +153,7 @@ main = do
153153 (view (hashes . at "SHA256") meta)
154154
155155 spec :: Spec
156− spec = Spec v mempty True True True `fromMaybe` (Map.lookup name stackagePackageSet >>= Map.lookup v)
156+ spec = Spec v True True `fromMaybe` (Map.lookup name stackagePackageSet >>= Map.lookup v)
157157
158158 flagAssignment :: FlagAssignment -- We don't use the flags from Stackage Nightly here, because
159159 flagAssignment = configureCabalFlags pkgId -- they are chosen specifically for GHC 7.10.2.
hackage2nix/src/Stackage.hs+13−5
@@ -5,6 +5,7 @@
55module Stackage where
66
77import Control.DeepSeq.Generics
8+import Control.Exception ( assert )
89import Control.Monad
910import Control.Monad.Par.Combinator
1011import Control.Monad.Par.IO
@@ -18,7 +19,6 @@ import Data.Yaml
1819import Distribution.Compiler
1920import Distribution.Nixpkgs.Haskell.OrphanInstances ( )
2021import Distribution.Package
21−import Distribution.PackageDescription
2222import Distribution.Version
2323import GHC.Generics ( Generic )
2424import Stackage.Types hiding ( display )
@@ -28,10 +28,10 @@ import Text.PrettyPrint.HughesPJClass
2828
2929data Spec = Spec
3030 { version :: Version
31− , flagOverrides :: Map FlagName Bool
31+ -- , flagOverrides :: Map FlagName Bool
3232 , runTests :: Bool
3333 , runHaddock :: Bool
34− , runLinuxBuilds :: Bool
34+ -- , runLinuxBuilds :: Bool
3535 }
3636 deriving (Show, Generic)
3737
@@ -94,13 +94,21 @@ fromBuildPlan snt bp = Snapshot snt
9494
9595fromPackagePlan :: PackagePlan -> Spec
9696fromPackagePlan pp = Spec (ppVersion pp)
97− (pcFlagOverrides ppc)
97+ -- (pcFlagOverrides ppc)
9898 (pcTests ppc == ExpectSuccess)
9999 (pcHaddocks ppc == ExpectSuccess)
100− (not (pcSkipBuild ppc))
100+ -- (not (pcSkipBuild ppc))
101101 where ppc = ppConstraints pp
102102
103103listFiles :: FilePath -> IO [FilePath]
104104listFiles path = do
105105 let isFile p = doesFileExist (path </> p)
106106 getDirectoryContents path >>= filterM isFile . Prelude.filter (\x -> head x /= '.')
107+
108+mergeSpecs :: Spec -> Spec -> Spec
109+mergeSpecs a b = Spec { version = assert (version a == version b) version a
110+ -- , flagOverrides = flagOverrides a
111+ , runTests = runTests a && runTests b
112+ , runHaddock = runHaddock a && runHaddock b
113+ -- , runLinuxBuilds = runLinuxBuilds a
114+ }