Skip to content

Commit c213a52

Browse files
committed
Able to load up SnapshotDef and begin LoadedSnapshot
1 parent 32e18a5 commit c213a52

11 files changed

Lines changed: 295 additions & 258 deletions

File tree

src/Stack/BuildPlan.hs

Lines changed: 194 additions & 192 deletions
Large diffs are not rendered by default.

src/Stack/Config.hs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,13 @@ makeConcreteResolver
188188
:: (StackMiniM env m, HasConfig env)
189189
=> AbstractResolver
190190
-> m Resolver
191-
makeConcreteResolver (ARResolver r) = return r
191+
makeConcreteResolver (ARResolver r) = do
192+
mapM (parseCustomLocation (error "FIXME makeConcreteResolver")) r
192193
makeConcreteResolver ar = do
193194
snapshots <- getSnapshots
194195
r <-
195196
case ar of
196-
ARResolver r -> assert False $ return r
197+
ARResolver r -> assert False $ makeConcreteResolver $ ARResolver r
197198
ARGlobal -> do
198199
config <- view configL
199200
implicitGlobalDir <- getImplicitGlobalProjectDir config
@@ -590,19 +591,16 @@ loadBuildConfig mproject config mresolver mcompiler = do
590591
, projectCompiler = mcompiler <|> projectCompiler project'
591592
}
592593

593-
{- FIXME
594-
(rs0, loadedResolver) <- flip runReaderT miniConfig $
595-
loadResolver (Just stackYamlFP) (projectResolver project)
596-
let rs = case projectCompiler project of
597-
Just compiler -> rs0 { rsCompilerVersion = compiler }
598-
Nothing -> rs0
599-
-}
594+
sd0 <- flip runReaderT miniConfig $ loadResolver resolver
595+
let sd = case projectCompiler project of
596+
Just compiler -> sd0 { sdCompilerVersion = compiler }
597+
Nothing -> sd0
600598

601599
extraPackageDBs <- mapM resolveDir' (projectExtraPackageDBs project)
602600

603601
return BuildConfig
604602
{ bcConfig = config
605-
, bcSnapshotDef = error "bcSnapshotDef"
603+
, bcSnapshotDef = sd
606604
, bcGHCVariant = view ghcVariantL miniConfig
607605
, bcPackageEntries = projectPackages project
608606
, bcExtraDeps = projectExtraDeps project

src/Stack/Config/Docker.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dockerOptsFromMonoid mproject stackRoot maresolver DockerOptsMonoid{..} = do
3838
(ResolverNotSupportedException $
3939
show aresolver)
4040
Nothing ->
41-
fmap projectResolver mproject
41+
fmap ((fmap.fmap) snd projectResolver) mproject
4242
defaultTag =
4343
case mresolver of
4444
Nothing -> ""

src/Stack/ConfigCmd.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,10 @@ cfgCmdSetValue (ConfigCmdSetResolver newResolver) = do
9393
concreteResolver <- makeConcreteResolver newResolver
9494
case concreteResolver of
9595
-- Check that the snapshot actually exists
96-
ResolverSnapshot snapName -> void $ loadSnapshotDef snapName
96+
ResolverSnapshot snapName -> void $ loadResolver $ ResolverSnapshot snapName
9797
ResolverCompiler _ -> return ()
9898
-- TODO: custom snapshot support? Would need a way to specify on CLI
99-
ResolverCustom _ _ () -> errorString "'stack config set resolver' does not support custom resolvers"
99+
ResolverCustom _ _ -> errorString "'stack config set resolver' does not support custom resolvers"
100100
return (Yaml.String (resolverName concreteResolver))
101101
cfgCmdSetValue (ConfigCmdSetSystemGhc _ bool) =
102102
return (Yaml.Bool bool)

src/Stack/Script.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import qualified Data.Text as T
2525
import Path
2626
import Path.IO
2727
import qualified Stack.Build
28-
import Stack.BuildPlan (loadResolver)
28+
import Stack.BuildPlan (loadResolver, loadSnapshot)
2929
import Stack.Exec
3030
import Stack.GhcPkg (ghcPkgExeName)
3131
import Stack.Options.ScriptParser
@@ -268,7 +268,7 @@ loadModuleInfo :: SnapName -> StackT EnvConfig IO ModuleInfo
268268
loadModuleInfo name = do
269269
path <- moduleInfoCache name
270270
$(versionedDecodeOrLoad moduleInfoVC) path $
271-
fmap toModuleInfo $ loadResolver Nothing $ ResolverSnapshot name
271+
fmap toModuleInfo $ loadResolver (ResolverSnapshot name) >>= loadSnapshot
272272

273273
parseImports :: ByteString -> (Set PackageName, Set ModuleName)
274274
parseImports =

src/Stack/Setup.hs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ import qualified Paths_stack as Meta
8888
import Prelude hiding (concat, elem, any) -- Fix AMP warning
8989
import Safe (headMay, readMay)
9090
import Stack.Build (build)
91+
import Stack.BuildPlan (loadSnapshot)
9192
import Stack.Config (loadConfig)
9293
import Stack.Constants (distRelativeDir, stackProgName)
9394
import Stack.Exec (defaultEnvSettings)
@@ -260,13 +261,21 @@ setupEnv mResolveMissingGHC = do
260261
$logDebug "Resolving package entries"
261262
packagesRef <- liftIO $ newIORef Nothing
262263
bc <- view buildConfigL
264+
265+
-- Set up a modified environment which includes the modified PATH
266+
-- that GHC can be found on. This is needed for looking up global
267+
-- package information in loadSnapshot.
268+
let bcPath :: BuildConfig
269+
bcPath = set envOverrideL (const (return menv)) bc
270+
271+
ls <- runInnerStackT bcPath $ loadSnapshot $ bcSnapshotDef bc
263272
let envConfig0 = EnvConfig
264273
{ envConfigBuildConfig = bc
265274
, envConfigCabalVersion = cabalVer
266275
, envConfigCompilerVersion = compilerVer
267276
, envConfigCompilerBuild = compilerBuild
268277
, envConfigPackagesRef = packagesRef
269-
, envConfigLoadedSnapshot = error "envLoadedSnapshot2"
278+
, envConfigLoadedSnapshot = ls
270279
}
271280

272281
-- extra installation bin directories

src/Stack/Solver.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,8 @@ getResolverConstraints
485485
-> m (CompilerVersion,
486486
Map PackageName (Version, Map FlagName Bool))
487487
getResolverConstraints stackYaml resolver = do
488-
rs <- loadResolver (Just stackYaml) resolver
489-
return (lsCompilerVersion rs, lsConstraints rs)
488+
ls <- loadResolver resolver >>= loadSnapshot
489+
return (lsCompilerVersion ls, lsConstraints ls)
490490
where
491491
lpiConstraints lpi = (lpiVersion lpi, maybe Map.empty pdFlags $ lpiDef lpi)
492492
lsConstraints = fmap lpiConstraints . lsPackages
@@ -657,15 +657,15 @@ solveExtraDeps modStackYaml = do
657657
let gpds = Map.elems $ fmap snd bundle
658658
oldFlags = unPackageFlags (bcFlags bconfig)
659659
oldExtraVersions = bcExtraDeps bconfig
660-
resolver = error "bcResolver" -- FIXME bcResolver bconfig
660+
resolver = sdResolver $ bcSnapshotDef bconfig
661661
oldSrcs = gpdPackages gpds
662662
oldSrcFlags = Map.intersection oldFlags oldSrcs
663663
oldExtraFlags = Map.intersection oldFlags oldExtraVersions
664664

665665
srcConstraints = mergeConstraints oldSrcs oldSrcFlags
666666
extraConstraints = mergeConstraints oldExtraVersions oldExtraFlags
667667

668-
let resolver' = toResolverNotLoaded resolver
668+
let resolver' = fmap (const (error "Solver FIXME")) resolver
669669
resolverResult <- checkResolverSpec gpds (Just oldSrcFlags) resolver'
670670
resultSpecs <- case resolverResult of
671671
BuildPlanCheckOk flags ->
@@ -701,14 +701,14 @@ solveExtraDeps modStackYaml = do
701701

702702
changed = any (not . Map.null) [newVersions, goneVersions]
703703
|| any (not . Map.null) [newFlags, goneFlags]
704-
|| any (/= resolver') mOldResolver
704+
|| any (/= (fmap snd resolver')) (fmap (fmap snd) mOldResolver)
705705

706706
if changed then do
707707
$logInfo ""
708708
$logInfo $ "The following changes will be made to "
709709
<> T.pack relStackYaml <> ":"
710710

711-
printResolver mOldResolver resolver'
711+
printResolver (fmap (fmap snd) mOldResolver) (fmap snd resolver')
712712

713713
printFlags newFlags "* Flags to be added"
714714
printDeps newVersions "* Dependencies to be added"

src/Stack/Types/BuildPlan.hs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ newtype StackageSnapshotDef = StackageSnapshotDef (SnapName -> SnapshotDef)
167167

168168
-- | Newtype wrapper to help parse a 'PackageDef' from the Stackage
169169
-- YAML files.
170-
newtype StackagePackageDef = StackagePackageDef { unStackagePackageDef :: PackageDef }
170+
newtype StackagePackageDef = StackagePackageDef { unStackagePackageDef :: PackageName -> PackageDef }
171171

172172
instance FromJSON StackageSnapshotDef where
173173
parseJSON = withObject "StackageSnapshotDef" $ \o -> do
@@ -181,7 +181,7 @@ instance FromJSON StackageSnapshotDef where
181181
(_, Just compiler) -> return compiler
182182
_ -> fail "expected field \"ghc-version\" or \"compiler-version\" not present"
183183

184-
sdPackages <- Map.map unStackagePackageDef <$> o .: "packages"
184+
sdPackages <- Map.mapWithKey (\k v -> unStackagePackageDef v k) <$> o .: "packages"
185185

186186
return $ StackageSnapshotDef $ \snapName ->
187187
let sdResolver = ResolverSnapshot snapName
@@ -200,14 +200,15 @@ instance FromJSON StackagePackageDef where
200200
return
201201
$ HashMap.lookup ("GitSHA1" :: Text) cfiHashes
202202
return CabalFileInfo {..}
203-
let pdLocation = PLIndex version mcabalFileInfo'
204203

205204
Object constraints <- o .: "constraints"
206205
pdFlags <- constraints .: "flags"
207206
pdHide <- constraints .:? "hide" .!= False
208207
let pdGhcOptions = [] -- Stackage snapshots do not allow setting GHC options
209208

210-
return $ StackagePackageDef PackageDef {..}
209+
return $ StackagePackageDef $ \name ->
210+
let pdLocation = PLIndex (PackageIdentifier name version) mcabalFileInfo'
211+
in PackageDef {..}
211212

212213
-- | Information on the contents of a cabal file
213214
data CabalFileInfo = CabalFileInfo
@@ -236,7 +237,7 @@ instance Store LoadedSnapshot
236237
instance NFData LoadedSnapshot
237238

238239
loadedSnapshotVC :: VersionConfig LoadedSnapshot
239-
loadedSnapshotVC = storeVersionConfig "ls-v1" "008JT34ImjzaL-brqnMwfPDWrBI="
240+
loadedSnapshotVC = storeVersionConfig "ls-v1" "-jKxkhdmu5EYSA5qaxw-r9ZzX7k="
240241

241242
-- | Information on a single package for the 'LoadedSnapshot' which
242243
-- can be installed.

src/Stack/Types/Config.hs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ module Stack.Types.Config
171171
,configUrlsL
172172
,cabalVersionL
173173
,whichCompilerL
174+
,envOverrideL
174175
-- * Lens reexport
175176
,view
176177
,to
@@ -1296,15 +1297,15 @@ flagCacheLocal = do
12961297
root <- installationRootLocal
12971298
return $ root </> $(mkRelDir "flag-cache")
12981299

1299-
-- | Where to store mini build plan caches
1300+
-- | Where to store 'LoadedSnapshot' caches
13001301
configLoadedSnapshotCache
13011302
:: (MonadThrow m, MonadReader env m, HasConfig env, HasGHCVariant env)
1302-
=> SnapName -- FIXME generalize?
1303+
=> LoadedResolver
13031304
-> m (Path Abs File)
1304-
configLoadedSnapshotCache name = do
1305+
configLoadedSnapshotCache resolver = do
13051306
root <- view stackRootL
13061307
platform <- platformGhcVerOnlyRelDir
1307-
file <- parseRelFile $ T.unpack (renderSnapName name) ++ ".cache"
1308+
file <- parseRelFile $ T.unpack (resolverName resolver) ++ ".cache"
13081309
-- Yes, cached plans differ based on platform
13091310
return (root </> $(mkRelDir "build-plan-cache") </> platform </> file)
13101311

@@ -1379,6 +1380,8 @@ parseProjectAndConfigMonoid rootDir =
13791380

13801381
flags <- o ..:? "flags" ..!= mempty
13811382
resolver <- jsonSubWarnings (o ..: "resolver")
1383+
>>= either (fail . show) return
1384+
. mapM (parseCustomLocation (Just (toFilePath rootDir)))
13821385
compiler <- o ..:? "compiler"
13831386
msg <- o ..:? "user-message"
13841387
config <- parseConfigMonoidObject rootDir o
@@ -1676,7 +1679,7 @@ data CustomSnapshot = CustomSnapshot
16761679
, csGhcOptions :: !GhcOptions
16771680
}
16781681

1679-
instance FromJSON (WithJSONWarnings (CustomSnapshot, Maybe Resolver)) where
1682+
instance (a ~ Maybe (ResolverWith Text)) => FromJSON (WithJSONWarnings (CustomSnapshot, a)) where
16801683
parseJSON = withObjectWarnings "CustomSnapshot" $ \o -> (,)
16811684
<$> (CustomSnapshot
16821685
<$> o ..:? "compiler"
@@ -1906,3 +1909,8 @@ loadedSnapshotL = envConfigL.lens
19061909

19071910
whichCompilerL :: Getting r CompilerVersion WhichCompiler
19081911
whichCompilerL = to whichCompiler
1912+
1913+
envOverrideL :: HasConfig env => Lens' env (EnvSettings -> IO EnvOverride)
1914+
envOverrideL = configL.lens
1915+
configEnvOverride
1916+
(\x y -> x { configEnvOverride = y })

0 commit comments

Comments
 (0)