Skip to content

Commit 76a3d24

Browse files
committed
Different approach to avoiding some ambiguity with record updates
1 parent 8714271 commit 76a3d24

23 files changed

+84
-97
lines changed

src/Stack/Build/ConstructPlan.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ constructPlan
278278
pure plan
279279

280280
prunedGlobalDeps :: Map PackageName [PackageName]
281-
prunedGlobalDeps = flip Map.mapMaybe sourceMap.global $
281+
prunedGlobalDeps = flip Map.mapMaybe sourceMap.globalPkgs $
282282
\case
283283
ReplacedGlobalPackage deps ->
284284
let pruned = filter (not . inSourceMap) deps
@@ -303,7 +303,7 @@ constructPlan
303303
case dp.location of
304304
PLImmutable loc ->
305305
pure $
306-
PSRemote loc (getPLIVersion loc) dp.fromSnapshot dp.common
306+
PSRemote loc (getPLIVersion loc) dp.fromSnapshot dp.depCommon
307307
PLMutable dir -> do
308308
pp <- mkProjectPackage YesPrintWarnings dir (shouldHaddockDeps bopts)
309309
lp <- loadLocalPackage' pp

src/Stack/Build/Haddock.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ openHaddocksInBrowser ::
6464
-- ^ Build targets as determined by 'Stack.Build.Source.loadSourceMap'
6565
-> RIO env ()
6666
openHaddocksInBrowser bco pkgLocations buildTargets = do
67-
let cliTargets = bco.buildOptsCLI.targets
67+
let cliTargets = bco.buildOptsCLI.targetsCLI
6868
getDocIndex = do
6969
let localDocs = haddockIndexFile (localDepsDocDir bco)
7070
localExists <- doesFileExist localDocs

src/Stack/Build/Installed.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ toInstallMap :: MonadIO m => SourceMap -> m InstallMap
4141
toInstallMap sourceMap = do
4242
projectInstalls <-
4343
for sourceMap.project $ \pp -> do
44-
version <- loadVersion pp.common
44+
version <- loadVersion pp.projectCommon
4545
pure (Local, version)
4646
depInstalls <-
4747
for sourceMap.deps $ \dp ->
4848
case dp.location of
4949
PLImmutable pli -> pure (Snap, getPLIVersion pli)
5050
PLMutable _ -> do
51-
version <- loadVersion dp.common
51+
version <- loadVersion dp.depCommon
5252
pure (Local, version)
5353
pure $ projectInstalls <> depInstalls
5454

src/Stack/Build/Source.hs

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,6 @@ import Stack.Types.SourceMap
6969
, SMActual (..), SMTargets (..), SourceMap (..)
7070
, SourceMapHash (..), Target (..), ppGPD, ppRoot
7171
)
72-
import qualified Stack.Types.SourceMap as DepPackage ( DepPackage (..) )
73-
import qualified Stack.Types.SourceMap as ProjectPackage ( ProjectPackage (..) )
7472
import Stack.Types.UnusedFlags ( FlagSource (..) )
7573
import System.FilePath ( takeFileName )
7674
import System.IO.Error ( isDoesNotExistError )
@@ -100,21 +98,17 @@ loadSourceMap :: HasBuildConfig env
10098
-> BuildOptsCLI
10199
-> SMActual DumpedGlobalPackage
102100
-> RIO env SourceMap
103-
loadSourceMap smt boptsCli sma = do
101+
loadSourceMap targets boptsCli sma = do
104102
bconfig <- view buildConfigL
105103
let compiler = sma.compiler
106104
project = M.map applyOptsFlagsPP sma.project
107105
bopts = bconfig.config.build
108-
applyOptsFlagsPP p@ProjectPackage{ common = c } = p
109-
{ ProjectPackage.common =
110-
applyOptsFlags (M.member c.name smt.targets) True c
111-
}
112-
deps0 = smt.deps <> sma.deps
106+
applyOptsFlagsPP p@ProjectPackage{ projectCommon = c } = p
107+
{ projectCommon = applyOptsFlags (M.member c.name targets.targets) True c }
108+
deps0 = targets.deps <> sma.deps
113109
deps = M.map applyOptsFlagsDep deps0
114-
applyOptsFlagsDep d@DepPackage{ common = c } = d
115-
{ DepPackage.common =
116-
applyOptsFlags (M.member c.name smt.deps) False c
117-
}
110+
applyOptsFlagsDep d@DepPackage{ depCommon = c } = d
111+
{ depCommon = applyOptsFlags (M.member c.name targets.deps) False c }
118112
applyOptsFlags isTarget isProjectPackage common =
119113
let name = common.name
120114
flags = getLocalFlags boptsCli name
@@ -141,18 +135,17 @@ loadSourceMap smt boptsCli sma = do
141135
Map.toList boptsCli.flags
142136
maybeProjectFlags (ACFByName name, fs) = Just (name, fs)
143137
maybeProjectFlags _ = Nothing
144-
globals = pruneGlobals sma.global (Map.keysSet deps)
138+
globalPkgs = pruneGlobals sma.global (Map.keysSet deps)
145139
logDebug "Checking flags"
146140
checkFlagsUsedThrowing packageCliFlags FSCommandLine project deps
147141
logDebug "SourceMap constructed"
148-
pure
149-
SourceMap
150-
{ targets = smt
151-
, compiler = compiler
152-
, project = project
153-
, deps = deps
154-
, global = globals
155-
}
142+
pure SourceMap
143+
{ targets
144+
, compiler
145+
, project
146+
, deps
147+
, globalPkgs
148+
}
156149

157150
-- | Get a 'SourceMapHash' for a given 'SourceMap'
158151
--
@@ -204,10 +197,10 @@ depPackageHashableContent dp =
204197
if enabled
205198
then ""
206199
else "-" <> fromString (C.unFlagName f)
207-
flags = map flagToBs $ Map.toList dp.common.flags
208-
ghcOptions = map display dp.common.ghcOptions
209-
cabalConfigOpts = map display dp.common.cabalConfigOpts
210-
haddocks = if dp.common.haddocks then "haddocks" else ""
200+
flags = map flagToBs $ Map.toList dp.depCommon.flags
201+
ghcOptions = map display dp.depCommon.ghcOptions
202+
cabalConfigOpts = map display dp.depCommon.cabalConfigOpts
203+
haddocks = if dp.depCommon.haddocks then "haddocks" else ""
211204
hash = immutableLocSha pli
212205
pure
213206
$ hash
@@ -307,7 +300,7 @@ loadLocalPackage ::
307300
-> RIO env LocalPackage
308301
loadLocalPackage pp = do
309302
sm <- view sourceMapL
310-
let common = pp.common
303+
let common = pp.projectCommon
311304
bopts <- view buildOptsL
312305
mcurator <- view $ buildConfigL . to (.curator)
313306
config <- getPackageConfig
@@ -416,7 +409,7 @@ loadLocalPackage pp = do
416409
{ package = pkg
417410
, testBench = btpkg
418411
, componentFiles
419-
, buildHaddocks = pp.common.haddocks
412+
, buildHaddocks = pp.projectCommon.haddocks
420413
, forceDirty = bopts.forceDirty
421414
, dirtyFiles
422415
, newBuildCaches

src/Stack/Build/Target.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ getRawInput ::
108108
-> Map PackageName ProjectPackage
109109
-> ([Text], [RawInput])
110110
getRawInput boptscli locals =
111-
let textTargets' = boptscli.targets
111+
let textTargets' = boptscli.targetsCLI
112112
textTargets =
113113
-- Handle the no targets case, which means we pass in the names of all
114114
-- project packages

src/Stack/BuildPlan.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ checkSnapBuildPlan ::
381381
checkSnapBuildPlan pkgDirs flags snapCandidate = do
382382
platform <- view platformL
383383
sma <- snapCandidate pkgDirs
384-
gpds <- liftIO $ forM (Map.elems sma.project) (.common.gpd)
384+
gpds <- liftIO $ forM (Map.elems sma.project) (.projectCommon.gpd)
385385

386386
let compiler = sma.compiler
387387
globalVersion (GlobalPackageVersion v) = v

src/Stack/Config.hs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,6 @@ import Stack.Types.SourceMap
138138
( CommonPackage (..), DepPackage (..), ProjectPackage (..)
139139
, SMWanted (..)
140140
)
141-
import qualified Stack.Types.SourceMap as DepPackage ( DepPackage (..) )
142-
import qualified Stack.Types.SourceMap as ProjectPackage ( ProjectPackage (..) )
143-
import qualified Stack.Types.SourceMap as CommonPackage ( CommonPackage (..) )
144141
import Stack.Types.StackYamlLoc ( StackYamlLoc (..) )
145142
import Stack.Types.UnusedFlags ( FlagSource (..) )
146143
import Stack.Types.Version
@@ -837,7 +834,7 @@ withBuildConfig inner = do
837834
{ userMsg = Nothing
838835
, packages = []
839836
, dependencies = map (RPLImmutable . flip RPLIHackage Nothing) extraDeps
840-
, flags = mempty
837+
, flagsByPkg = mempty
841838
, resolver = r
842839
, compiler = Nothing
843840
, extraPackageDBs = []
@@ -861,7 +858,7 @@ fillProjectWanted stackYamlFP config project locCache snapCompiler snapPackages
861858
abs' <- resolveDir (parent stackYamlFP) (T.unpack t)
862859
let resolved = ResolvedPath fp abs'
863860
pp <- mkProjectPackage YesPrintWarnings resolved bopts.haddock
864-
pure (pp.common.name, pp)
861+
pure (pp.projectCommon.name, pp)
865862

866863
-- prefetch git repos to avoid cloning per subdirectory
867864
-- see https://github.com/commercialhaskell/stack/issues/5411
@@ -891,7 +888,7 @@ fillProjectWanted stackYamlFP config project locCache snapCompiler snapPackages
891888
RPLMutable p ->
892889
pure (PLMutable p, Nothing)
893890
dp <- additionalDepPackage (shouldHaddockDeps bopts) pl
894-
pure ((dp.common.name, dp), mCompleted)
891+
pure ((dp.depCommon.name, dp), mCompleted)
895892

896893
checkDuplicateNames $
897894
map (second (PLMutable . (.resolvedDir))) packages0 ++
@@ -909,19 +906,19 @@ fillProjectWanted stackYamlFP config project locCache snapCompiler snapPackages
909906

910907
let mergeApply m1 m2 f =
911908
MS.merge MS.preserveMissing MS.dropMissing (MS.zipWithMatched f) m1 m2
912-
pFlags = project.flags
909+
pFlags = project.flagsByPkg
913910
packages2 = mergeApply packages1 pFlags $ \_ p flags ->
914-
p { ProjectPackage.common = p.common { CommonPackage.flags = flags } }
911+
p { projectCommon = p.projectCommon { flags = flags } }
915912
deps2 = mergeApply deps1 pFlags $ \_ d flags ->
916-
d { DepPackage.common = d.common { CommonPackage.flags = flags } }
913+
d { depCommon = d.depCommon { flags = flags } }
917914

918915
checkFlagsUsedThrowing pFlags FSStackYaml packages1 deps1
919916

920917
let pkgGhcOptions = config.ghcOptionsByName
921918
deps = mergeApply deps2 pkgGhcOptions $ \_ d options ->
922-
d { DepPackage.common = d.common { ghcOptions = options } }
919+
d { depCommon = d.depCommon { ghcOptions = options } }
923920
packages = mergeApply packages2 pkgGhcOptions $ \_ p options ->
924-
p { ProjectPackage.common = p.common { ghcOptions = options } }
921+
p { projectCommon = p.projectCommon { ghcOptions = options } }
925922
unusedPkgGhcOptions =
926923
pkgGhcOptions `Map.restrictKeys` Map.keysSet packages2
927924
`Map.restrictKeys` Map.keysSet deps2

src/Stack/Coverage.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ import Stack.Types.BuildConfig
4949
( BuildConfig (..), HasBuildConfig (..) )
5050
import Stack.Types.Compiler ( getGhcVersion )
5151
import Stack.Types.CompCollection ( getBuildableSetText )
52-
import Stack.Types.BuildOptsCLI ( defaultBuildOptsCLI )
53-
import qualified Stack.Types.BuildOptsCLI as BuildOptsCLI ( BuildOptsCLI (..) )
52+
import Stack.Types.BuildOptsCLI
53+
( BuildOptsCLI (..), defaultBuildOptsCLI )
5454
import Stack.Types.EnvConfig
5555
( EnvConfig (..), HasEnvConfig (..), actualCompilerVersionL
5656
, hpcReportDir
@@ -115,7 +115,7 @@ hpcReportCmd hropts = do
115115
let (tixFiles, targetNames) =
116116
L.partition (".tix" `T.isSuffixOf`) hropts.hroptsInputs
117117
boptsCLI = defaultBuildOptsCLI
118-
{ BuildOptsCLI.targets = if hropts.hroptsAll then [] else targetNames }
118+
{ targetsCLI = if hropts.hroptsAll then [] else targetNames }
119119
withConfig YesReexec $ withEnvConfig AllowNoTargets boptsCLI $
120120
generateHpcReportForTargets hropts tixFiles targetNames
121121

src/Stack/DependencyGraph.hs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ import Stack.Types.SourceMap
5757
( CommonPackage (..), DepPackage (..), ProjectPackage (..)
5858
, SMActual (..), SMWanted (..), SourceMap (..)
5959
)
60-
import qualified Stack.Types.SourceMap as SMActual ( SMActual (..) )
6160

6261
-- | Type representing exceptions thrown by functions exported by the
6362
-- "Stack.DependencyGraph" module.
@@ -139,7 +138,7 @@ withDotConfig opts inner =
139138
actualPkgs =
140139
Map.keysSet smActual.deps <> Map.keysSet smActual.project
141140
prunedActual = smActual
142-
{ SMActual.global = pruneGlobals smActual.global actualPkgs }
141+
{ global = pruneGlobals smActual.global actualPkgs }
143142
targets <- parseTargets NeedTargets False boptsCLI prunedActual
144143
logDebug "Loading source map"
145144
sourceMap <- loadSourceMap targets boptsCLI smActual
@@ -164,7 +163,7 @@ withDotConfig opts inner =
164163
runRIO dc inner
165164

166165
boptsCLI = defaultBuildOptsCLI
167-
{ targets = opts.dotTargets
166+
{ targetsCLI = opts.dotTargets
168167
, flags = opts.flags
169168
}
170169
modifyGO =
@@ -257,19 +256,19 @@ createDepLoader sourceMap globalDumpMap globalIdMap loadPackageDeps pkgName =
257256
projectPackageDeps = loadDeps <$> Map.lookup pkgName sourceMap.project
258257
where
259258
loadDeps pp = do
260-
pkg <- loadCommonPackage pp.common
259+
pkg <- loadCommonPackage pp.projectCommon
261260
pure (setOfPackageDeps pkg, payloadFromLocal pkg Nothing)
262261

263262
dependencyDeps =
264263
loadDeps <$> Map.lookup pkgName sourceMap.deps
265264
where
266265
loadDeps DepPackage{ location = PLMutable dir } = do
267266
pp <- mkProjectPackage YesPrintWarnings dir False
268-
pkg <- loadCommonPackage pp.common
267+
pkg <- loadCommonPackage pp.projectCommon
269268
pure (setOfPackageDeps pkg, payloadFromLocal pkg (Just $ PLMutable dir))
270269

271270
loadDeps dp@DepPackage{ location = PLImmutable loc } = do
272-
let common = dp.common
271+
let common = dp.depCommon
273272
gpd <- liftIO common.gpd
274273
let PackageIdentifier name version = PD.package $ PD.packageDescription gpd
275274
flags = common.flags

src/Stack/Exec.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ execCmd opts =
124124
eo = opts.eoExtra
125125

126126
targets = concatMap words eo.eoPackages
127-
boptsCLI = defaultBuildOptsCLI { targets = map T.pack targets }
127+
boptsCLI = defaultBuildOptsCLI { targetsCLI = map T.pack targets }
128128

129129
-- return the package-id of the first package in GHC_PACKAGE_PATH
130130
getPkgId name = do

0 commit comments

Comments
 (0)