@@ -7,6 +7,8 @@ import Data.Maybe (fromMaybe)
7import Data.Semigroup ((<>))
7import Data.Semigroup ((<>))
8import Distribution.Nixpkgs.Haskell.FromStack
8import Distribution.Nixpkgs.Haskell.FromStack
9import Distribution.Nixpkgs.Haskell.FromStack.Package
9import Distribution.Nixpkgs.Haskell.FromStack.Package
10+import Distribution.Nixpkgs.Haskell.Hackage as DB
11+import Distribution.Nixpkgs.Haskell.PackageSourceSpec (loadHackageDB)
10import Distribution.Nixpkgs.Haskell.Stack
12import Distribution.Nixpkgs.Haskell.Stack
11import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
13import Distribution.Nixpkgs.Haskell.Stack.PrettyPrinting as PP
12import Distribution.Version (Version)
14import Distribution.Version (Version)
@@ -30,6 +32,7 @@ import qualified LtsHaskell as LH
30run :: IO ()
32run :: IO ()
32 opts <- execParser pinfo
34 opts <- execParser pinfo
35+ hackageDb <- loadHackageDB (opts ^. optHackageDb) Nothing
34 -- With optparse-applicative it seems there's no way to make
37 -- With optparse-applicative it seems there's no way to make
35 -- 'StackageOptions' optional for Stackage override and required in
38 -- 'StackageOptions' optional for Stackage override and required in
@@ -46,12 +49,12 @@ run = do
47 stackResolver = stackConf ^. scResolver
50 stackResolver = stackConf ^. scResolver
48 stackPackagesConfig = mkStackPackagesConfig opts
51 stackPackagesConfig = mkStackPackagesConfig opts
49− stackConfPackages <- traverse (fmap mkNode . packageDerivation stackPackagesConfig (opts ^. optHackageDb))
52+ stackConfPackages <- traverse (fmap mkNode . packageDerivation stackPackagesConfig hackageDb)
50 $ stackConf ^. scPackages
53 $ stackConf ^. scPackages
52 case buildTarget of
55 case buildTarget of
53 TargetStackageClosure -> do
56 TargetStackageClosure -> do
54− (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan stackResolver opts sopts
57+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
56 overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
59 overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
57 stackageSetConfig = if opts ^. optTweaks . tExtraDepsRevisionLatest
60 stackageSetConfig = if opts ^. optTweaks . tExtraDepsRevisionLatest
@@ -84,7 +87,7 @@ run = do
84 $ PP.overrideHaskellPackages overrideConfig (view nodeDerivation <$> stackConfPackages)
87 $ PP.overrideHaskellPackages overrideConfig (view nodeDerivation <$> stackConfPackages)
86 TargetStackagePackages -> do
89 TargetStackagePackages -> do
87− (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan stackResolver opts sopts
90+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
89 overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
92 overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
90 stackageSetConfig = if opts ^. optTweaks . tExtraDepsRevisionLatest
93 stackageSetConfig = if opts ^. optTweaks . tExtraDepsRevisionLatest
@@ -112,7 +115,7 @@ run = do
113 -- Generate Stackage packages from resolver
116 -- Generate Stackage packages from resolver
114 OriginResolver stackResolver -> do
117 OriginResolver stackResolver -> do
115− (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan stackResolver opts sopts
118+ (buildPlanFile, buildPlan, packageSetConfig) <- loadStackageBuildPlan hackageDb stackResolver opts sopts
116 nodes <- buildStackagePackages packageSetConfig buildPlan
119 nodes <- buildStackagePackages packageSetConfig buildPlan
117 let overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
120 let overrideConfig = mkOverrideConfig opts (siGhcVersion $ bpSystemInfo buildPlan)
118 writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
121 writeOutFile buildPlanFile (opts ^. optOutStackagePackages)
@@ -122,12 +125,12 @@ run = do
122 writeOutFile buildPlanFile (opts ^. optOutDerivation)
125 writeOutFile buildPlanFile (opts ^. optOutDerivation)
123 $ PP.pPrintHaskellPackages overrideConfig
126 $ PP.pPrintHaskellPackages overrideConfig
125−loadStackageBuildPlan :: StackResolver -> Options -> StackageOptions -> IO (FilePath, BuildPlan, PackageSetConfig)
128+loadStackageBuildPlan :: DB.HackageDB -> StackResolver -> Options -> StackageOptions -> IO (FilePath, BuildPlan, PackageSetConfig)
126−loadStackageBuildPlan stackResolver opts sopts = do
129+loadStackageBuildPlan hackageDb stackResolver opts sopts = do
127 let buildPlanFile = LH.buildPlanFilePath (sopts ^. soptLtsHaskellRepo) stackResolver
130 let buildPlanFile = LH.buildPlanFilePath (sopts ^. soptLtsHaskellRepo) stackResolver
128 buildPlan <- LH.loadBuildPlan buildPlanFile
131 buildPlan <- LH.loadBuildPlan buildPlanFile
129 packageSetConfig <- LH.buildPackageSetConfig
132 packageSetConfig <- LH.buildPackageSetConfig
130− (opts ^. optHackageDb)
133+ hackageDb
131 (sopts ^. soptAllCabalHashesRepo)
134 (sopts ^. soptAllCabalHashesRepo)
132 (opts ^. optNixpkgsRepository)
135 (opts ^. optNixpkgsRepository)
133 buildPlan
136 buildPlan