Skip to content

Commit 4bc4f15

Browse files
committed
Cache show-build-info results in cache directory
1 parent 07fed6d commit 4bc4f15

File tree

3 files changed

+32
-33
lines changed

3 files changed

+32
-33
lines changed

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

+1-1
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

+18-19
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

+13-13
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)
@@ -1193,6 +1192,7 @@ buildInplaceUnpackedPackage :: Verbosity
11931192
buildInplaceUnpackedPackage verbosity
11941193
distDirLayout@DistDirLayout {
11951194
distTempDirectory,
1195+
distProjectCacheDirectory,
11961196
distPackageCacheDirectory,
11971197
distDirectory
11981198
}
@@ -1206,7 +1206,6 @@ buildInplaceUnpackedPackage verbosity
12061206
rpkg@(ReadyPackage pkg)
12071207
buildStatus
12081208
srcdir builddir = do
1209-
12101209
--TODO: [code cleanup] there is duplication between the
12111210
-- distdirlayout and the builddir here builddir is not
12121211
-- enough, we also need the per-package cachedir
@@ -1301,7 +1300,7 @@ buildInplaceUnpackedPackage verbosity
13011300
--
13021301
whenRepl $
13031302
annotateFailureNoLog ReplFailed $
1304-
setupInteractive replCommand replFlags replArgs
1303+
setupInteractive replCommand replFlags replArgs
13051304

13061305
-- Haddock phase
13071306
whenHaddock $
@@ -1317,22 +1316,23 @@ buildInplaceUnpackedPackage verbosity
13171316
notice verbosity $ "Documentation tarball created: " ++ dest
13181317

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

13311331
return BuildResult {
13321332
buildResultDocs = docsResult,
13331333
buildResultTests = testsResult,
13341334
buildResultLogFile = Nothing,
1335-
buildResultBuildInfo = buildInfo
1335+
buildResultBuildInfo = Nothing
13361336
}
13371337

13381338
where
@@ -1371,7 +1371,7 @@ buildInplaceUnpackedPackage verbosity
13711371
| otherwise = return ()
13721372

13731373
whenBuildInfo action
1374-
| null (elabBuildInfoTargets pkg) = return Nothing
1374+
| null (elabBuildInfoTargets pkg) = return ()
13751375
| otherwise = action
13761376

13771377
whenReRegister action

0 commit comments

Comments
 (0)