Skip to content

Commit 79811cf

Browse files
committed
Cache show-build-info results in cache directory
1 parent 87a9188 commit 79811cf

File tree

3 files changed

+31
-31
lines changed

3 files changed

+31
-31
lines changed

cabal-install/src/Distribution/Client/CmdBench.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ benchAction flags@NixStyleFlags {..} targetStrings globalFlags = do
118118
runProjectPostBuildPhase verbosity baseCtx buildCtx buildOutcomes
119119
where
120120
verbosity = fromFlagOrDefault normal (configVerbosity configFlags)
121-
cliConfig = commandLineFlagsToProjectConfig globalFlags flags
121+
cliConfig = commandLineFlagsToProjectConfig globalFlags flags
122122
mempty -- ClientInstallFlags, not needed here
123123

124124
-- | This defines what a 'TargetSelector' means for the @bench@ command.

cabal-install/src/Distribution/Client/CmdShowBuildInfo.hs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module Distribution.Client.CmdShowBuildInfo (
88
) where
99

1010
import Distribution.Client.Compat.Prelude
11-
( catMaybes )
11+
( for )
1212
import Distribution.Client.ProjectOrchestration
1313
import Distribution.Client.CmdErrorMessages
1414

@@ -17,7 +17,7 @@ import Distribution.Client.Setup
1717
import Distribution.Client.TargetProblem
1818
( TargetProblem', TargetProblem (TargetProblemNoneEnabled, TargetProblemNoTargets) )
1919
import Distribution.Simple.Setup
20-
(Flag(..), haddockVerbosity, configVerbosity, fromFlagOrDefault )
20+
( configVerbosity, fromFlagOrDefault )
2121
import Distribution.Simple.Command
2222
( CommandUI(..), option, reqArg', usageAlternatives )
2323
import Distribution.Verbosity
@@ -26,20 +26,19 @@ import Distribution.Simple.Utils
2626
( wrapText )
2727

2828
import qualified Data.Map as Map
29-
import qualified Distribution.Simple.Setup as Cabal
30-
import Distribution.Client.ProjectBuilding.Types
3129
import Distribution.Client.ProjectPlanning.Types
3230
import Distribution.Client.NixStyleOptions
3331
( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags )
3432
import Distribution.Client.DistDirLayout
35-
( distProjectRootDirectory )
33+
( distProjectRootDirectory, DistDirLayout (distProjectCacheDirectory) )
3634

3735
import Distribution.Simple.ShowBuildInfo
3836
import Distribution.Utils.Json
3937

40-
import Data.Either
4138
import qualified Data.Text as T
4239
import qualified Data.Text.IO as T
40+
import System.FilePath
41+
import Distribution.Types.UnitId (unUnitId)
4342

4443
showBuildInfoCommand :: CommandUI (NixStyleFlags ShowBuildInfoFlags)
4544
showBuildInfoCommand = CommandUI {
@@ -108,13 +107,13 @@ showBuildInfoAction flags@NixStyleFlags { extraFlags = (ShowBuildInfoFlags fileO
108107
buildOutcomes <- runProjectBuildPhase verbosity baseCtx buildCtx
109108
runProjectPostBuildPhase verbosity baseCtx buildCtx buildOutcomes
110109

111-
-- We can ignore the errors here, since runProjectPostBuildPhase should
112-
-- have already died and reported them if they exist
113-
let (_errs, buildResults) = partitionEithers $ Map.elems buildOutcomes
114-
115-
let componentBuildInfos =
116-
concatMap T.lines $ -- Component infos are returned each on a newline
117-
catMaybes (buildResultBuildInfo <$> buildResults)
110+
let tm = targetsMap buildCtx
111+
let units = Map.keys tm
112+
let layout = distDirLayout baseCtx
113+
let dir = distProjectCacheDirectory layout </> "buildinfo"
114+
componentBuildInfos <- for units $ \unit -> do
115+
let fp = dir </> (unUnitId unit) <.> "json"
116+
T.strip <$> T.readFile fp
118117

119118
let compilerInfo = mkCompilerInfo
120119
(pkgConfigCompilerProgs (elaboratedShared buildCtx))
@@ -135,12 +134,12 @@ showBuildInfoAction flags@NixStyleFlags { extraFlags = (ShowBuildInfoFlags fileO
135134
-- Default to silent verbosity otherwise it will pollute our json output
136135
verbosity = fromFlagOrDefault silent (configVerbosity configFlags)
137136
-- Also shut up haddock since it dumps warnings to stdout
138-
flags' = flags { haddockFlags = haddockFlags { haddockVerbosity = Flag silent }
139-
, configFlags = configFlags { Cabal.configTests = Flag True
140-
, Cabal.configBenchmarks = Flag True
141-
}
142-
}
143-
cliConfig = commandLineFlagsToProjectConfig globalFlags flags'
137+
-- flags' = flags { haddockFlags = haddockFlags { haddockVerbosity = Flag silent }
138+
-- , configFlags = configFlags { Cabal.configTests = Flag True
139+
-- , Cabal.configBenchmarks = Flag True
140+
-- }
141+
-- }
142+
cliConfig = commandLineFlagsToProjectConfig globalFlags flags
144143
mempty -- ClientInstallFlags, not needed here
145144

146145
-- | This defines what a 'TargetSelector' means for the @show-build-info@ command.

cabal-install/src/Distribution/Client/ProjectBuilding.hs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ import qualified Data.Map as Map
9797
import qualified Data.Set as Set
9898
import qualified Data.ByteString as BS
9999
import qualified Data.ByteString.Lazy as LBS
100-
import qualified Data.Text.IO as T
101100

102101
import Control.Exception (Handler (..), SomeAsyncException, assert, catches, handle)
103102
import System.Directory (canonicalizePath, createDirectoryIfMissing, doesDirectoryExist, doesFileExist, removeFile, renameDirectory)
@@ -1194,6 +1193,7 @@ buildInplaceUnpackedPackage :: Verbosity
11941193
buildInplaceUnpackedPackage verbosity
11951194
distDirLayout@DistDirLayout {
11961195
distTempDirectory,
1196+
distProjectCacheDirectory,
11971197
distPackageCacheDirectory,
11981198
distDirectory
11991199
}
@@ -1318,22 +1318,23 @@ buildInplaceUnpackedPackage verbosity
13181318
notice verbosity $ "Documentation tarball created: " ++ dest
13191319

13201320
-- Build info phase
1321-
buildInfo <- whenBuildInfo $
1321+
{- buildInfo <- -}
1322+
whenBuildInfo $ do
13221323
-- Write the json to a temporary file to read it, since stdout can get
13231324
-- cluttered
1324-
withTempDirectory verbosity distTempDirectory "build-info" $ \dir -> do
1325-
let fp = dir </> "out"
1326-
setupInteractive
1327-
buildInfoCommand
1328-
(\v -> (buildInfoFlags v) { Cabal.buildInfoOutputFile = Just fp })
1329-
buildInfoArgs
1330-
Just <$> T.readFile fp
1325+
let dir = distProjectCacheDirectory </> "buildinfo"
1326+
let fp = dir </> (unUnitId $ elabUnitId pkg) <.> "json"
1327+
createDirectoryIfMissing True dir
1328+
setupInteractive
1329+
buildInfoCommand
1330+
(\v -> (buildInfoFlags v) { Cabal.buildInfoOutputFile = Just fp })
1331+
buildInfoArgs
13311332

13321333
return BuildResult {
13331334
buildResultDocs = docsResult,
13341335
buildResultTests = testsResult,
13351336
buildResultLogFile = Nothing,
1336-
buildResultBuildInfo = buildInfo
1337+
buildResultBuildInfo = Nothing
13371338
}
13381339

13391340
where
@@ -1372,7 +1373,7 @@ buildInplaceUnpackedPackage verbosity
13721373
| otherwise = return ()
13731374

13741375
whenBuildInfo action
1375-
| null (elabBuildInfoTargets pkg) = return Nothing
1376+
| null (elabBuildInfoTargets pkg) = return ()
13761377
| otherwise = action
13771378

13781379
whenReRegister action

0 commit comments

Comments
 (0)