Skip to content

Commit 0e24b54

Browse files
committed
Add projectConfigBuildOnly flags jobs, offline,...
1 parent 540f499 commit 0e24b54

File tree

5 files changed

+43
-21
lines changed

5 files changed

+43
-21
lines changed

cabal-install/src/Distribution/Client/ProjectConfig/FieldGrammar.hs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,14 @@ projectConfigBuildOnlyFieldGrammar =
4141
<*> monoidalFieldAla "build-summary" (alaNubList VCat) L.projectConfigSummaryFile
4242
<*> optionalFieldDef "build-log" L.projectConfigLogFile mempty
4343
<*> pure mempty -- cli flag: projectConfigBuildReports
44-
<*> optionalFieldDef "report-planning-failure" L.projectConfigReportPlanningFailure (pure False)
44+
<*> optionalFieldDef "report-planning-failure" L.projectConfigReportPlanningFailure mempty
4545
<*> monoidalFieldAla "symlink-bindir" (alaFlag FilePathNT) L.projectConfigSymlinkBinDir
46-
-- TODO check numJobsParser
47-
-- <*> optionalFieldDef "jobs" L.projectConfigNumJobs (pure )
48-
<*> undefined
49-
<*> undefined
50-
<*> undefined
51-
<*> undefined
52-
<*> undefined
53-
<*> undefined
54-
<*> undefined
55-
<*> undefined
56-
<*> undefined
46+
<*> monoidalFieldAla "jobs" (alaFlag NumJobs) L.projectConfigNumJobs
47+
<*> optionalFieldDef "keep-going" L.projectConfigKeepGoing mempty
48+
<*> optionalFieldDef "offline" L.projectConfigOfflineMode mempty
49+
<*> optionalFieldDef "haddock-keep-temp-files" L.projectConfigKeepTempFiles mempty
50+
<*> monoidalFieldAla "http-transport" (alaFlag Token) L.projectConfigHttpTransport
51+
<*> optionalFieldDef "ignore-expiry" L.projectConfigIgnoreExpiry mempty
52+
<*> monoidalFieldAla "remote-repo-cache" (alaFlag FilePathNT) L.projectConfigCacheDir
53+
<*> monoidalFieldAla "logs-dir" (alaFlag FilePathNT) L.projectConfigLogsDir
54+
<*> pure mempty

cabal-install/src/Distribution/Client/ProjectConfig/Types.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ data ProjectConfigBuildOnly = ProjectConfigBuildOnly
157157
, projectConfigReportPlanningFailure :: Flag Bool
158158
, projectConfigSymlinkBinDir :: Flag FilePath
159159
, projectConfigNumJobs :: Flag (Maybe Int)
160+
-- ^ Use 'Just n' for number of jobs, 'Nothing' for number of jobs equal to the number of CPUs and 'NoFlag' if flag is not given.
160161
, projectConfigKeepGoing :: Flag Bool
161162
, projectConfigOfflineMode :: Flag Bool
162163
, projectConfigKeepTempFiles :: Flag Bool

cabal-install/src/Distribution/Client/Utils/Parsec.hs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{-# LANGUAGE FlexibleInstances #-}
12
{-# LANGUAGE MultiParamTypeClasses #-}
23
{-# LANGUAGE ScopedTypeVariables #-}
34

@@ -12,6 +13,7 @@ module Distribution.Client.Utils.Parsec
1213
, alaNubList
1314
, alaNubList'
1415
, NubList'
16+
, NumJobs (..)
1517
) where
1618

1719
import Distribution.Client.Compat.Prelude
@@ -23,7 +25,8 @@ import qualified Data.ByteString as BS
2325
import qualified Data.ByteString.Char8 as BS8
2426

2527
import Distribution.FieldGrammar.Newtypes
26-
import Distribution.Parsec (PError (..), PWarning (..), Position (..), showPos, zeroPos)
28+
import Distribution.Parsec (PError (..), PWarning (..), Position (..), showPos, zeroPos, parsecWarning, PWarnType (..))
29+
import Distribution.Compat.CharParsing
2730
import Distribution.Simple.Flag
2831
import Distribution.Simple.Utils (fromUTF8BS)
2932
import Distribution.Utils.NubList (NubList (..))
@@ -167,3 +170,23 @@ instance (Newtype a b, Ord a, Sep sep, Parsec b) => Parsec (NubList' sep b a) wh
167170

168171
instance (Newtype a b, Sep sep, Pretty b) => Pretty (NubList' sep b a) where
169172
pretty = prettySep (Proxy :: Proxy sep) . map (pretty . (pack :: a -> b)) . NubList.fromNubList . unpack
173+
174+
newtype NumJobs = NumJobs {getNumJobs :: Maybe Int}
175+
176+
instance Newtype (Maybe Int) NumJobs
177+
178+
instance Parsec NumJobs where
179+
parsec = parsecNumJobs
180+
181+
parsecNumJobs :: CabalParsing m => m NumJobs
182+
parsecNumJobs = ncpus <|> numJobs
183+
where
184+
ncpus = string "$ncpus" >> return (NumJobs Nothing)
185+
numJobs = do
186+
num <- integral
187+
if num < (1 :: Int)
188+
then do
189+
parsecWarning PWTOther "The number of jobs should be 1 or more."
190+
return (NumJobs Nothing)
191+
else return (NumJobs $ Just num)
192+

cabal-install/tests/IntegrationTests2/ProjectConfig/ParsecTests.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,23 +92,23 @@ testProjectConfigBuildOnly = do
9292
assertConfig expected config legacy (projectConfigBuildOnly . condTreeData)
9393
where
9494
projectConfigVerbosity = toFlag (toEnum 2)
95-
projectConfigDryRun = toFlag False -- cli only
96-
projectConfigOnlyDeps = toFlag False -- cli only
97-
projectConfigOnlyDownload = toFlag False -- cli only
95+
projectConfigDryRun = mempty -- cli only
96+
projectConfigOnlyDeps = mempty -- cli only
97+
projectConfigOnlyDownload = mempty -- cli only
9898
projectConfigSummaryFile = toNubList [toPathTemplate "summaryFile"]
99-
projectConfigLogFile = toFlag $ toPathTemplate "myLog.log" -- TODO could be build-log
100-
projectConfigBuildReports = toFlag NoReports -- TODO maybe cli only?
99+
projectConfigLogFile = toFlag $ toPathTemplate "myLog.log"
100+
projectConfigBuildReports = mempty -- cli only
101101
projectConfigReportPlanningFailure = toFlag True
102102
projectConfigSymlinkBinDir = toFlag "some-bindir"
103103
projectConfigNumJobs = toFlag $ Just 4
104-
projectConfigKeepGoing = toFlag True -- cli only
104+
projectConfigKeepGoing = toFlag True
105105
projectConfigOfflineMode = toFlag True
106106
projectConfigKeepTempFiles = toFlag True
107107
projectConfigHttpTransport = toFlag "wget"
108108
projectConfigIgnoreExpiry = toFlag True
109109
projectConfigCacheDir = toFlag "some-cache-dir"
110110
projectConfigLogsDir = toFlag "logs-directory"
111-
projectConfigClientInstallFlags = mempty -- TODO are these actually cli only?
111+
projectConfigClientInstallFlags = mempty -- cli only
112112

113113
readConfigDefault :: FilePath -> IO (ProjectConfigSkeleton, ProjectConfigSkeleton)
114114
readConfigDefault rootFp = readConfig rootFp "cabal.project"

cabal-install/tests/IntegrationTests2/ProjectConfig/files/project-config-build-only/cabal.project

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
verbose: 2
22
build-summary: summaryFile
33
build-log: myLog.log
4-
report-planned-failure: true
4+
report-planning-failure: true
55
symlink-bindir: some-bindir
66
jobs: 4
77
keep-going: true

0 commit comments

Comments
 (0)