Skip to content

Commit 00a2351

Browse files
authored
Merge pull request #7347 from fgaz/download-only
--only-download flag
2 parents c93199f + a7c6c01 commit 00a2351

File tree

9 files changed

+60
-7
lines changed

9 files changed

+60
-7
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ instance Semigroup SavedConfig where
294294
installDocumentation = combine installDocumentation,
295295
installHaddockIndex = combine installHaddockIndex,
296296
installDryRun = combine installDryRun,
297+
installOnlyDownload = combine installOnlyDownload,
297298
installDest = combine installDest,
298299
installMaxBackjumps = combine installMaxBackjumps,
299300
installReorderGoals = combine installReorderGoals,

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

+8-2
Original file line numberDiff line numberDiff line change
@@ -652,8 +652,14 @@ rebuildTarget verbosity
652652
registerLock cacheLock
653653
sharedPackageConfig
654654
plan rpkg@(ReadyPackage pkg)
655-
pkgBuildStatus =
656-
655+
pkgBuildStatus
656+
| buildSettingOnlyDownload buildSettings = do
657+
case pkgBuildStatus of
658+
BuildStatusDownload ->
659+
void $ waitAsyncPackageDownload verbosity downloadMap pkg
660+
_ -> return ()
661+
return $ BuildResult DocsNotTried TestsNotTried Nothing
662+
| otherwise =
657663
-- We rely on the 'BuildStatus' to decide which phase to start from:
658664
case pkgBuildStatus of
659665
BuildStatusDownload -> downloadPhase

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

+2
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ resolveBuildTimeSettings verbosity
303303
where
304304
buildSettingDryRun = fromFlag projectConfigDryRun
305305
buildSettingOnlyDeps = fromFlag projectConfigOnlyDeps
306+
buildSettingOnlyDownload = fromFlag projectConfigOnlyDownload
306307
buildSettingSummaryFile = fromNubList projectConfigSummaryFile
307308
--buildSettingLogFile -- defined below, more complicated
308309
--buildSettingLogVerbosity -- defined below, more complicated
@@ -328,6 +329,7 @@ resolveBuildTimeSettings verbosity
328329
defaults = mempty {
329330
projectConfigDryRun = toFlag False,
330331
projectConfigOnlyDeps = toFlag False,
332+
projectConfigOnlyDownload = toFlag False,
331333
projectConfigBuildReports = toFlag NoReports,
332334
projectConfigReportPlanningFailure = toFlag False,
333335
projectConfigKeepGoing = toFlag False,

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

+2
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ convertLegacyBuildOnlyFlags globalFlags configFlags
509509

510510
InstallFlags {
511511
installDryRun = projectConfigDryRun,
512+
installOnlyDownload = projectConfigOnlyDownload,
512513
installOnly = _,
513514
installOnlyDeps = projectConfigOnlyDeps,
514515
installRootCmd = _,
@@ -612,6 +613,7 @@ convertToLegacySharedConfig
612613
installHaddockIndex = projectConfigHaddockIndex,
613614
installDest = Flag NoCopyDest,
614615
installDryRun = projectConfigDryRun,
616+
installOnlyDownload = projectConfigOnlyDownload,
615617
installReinstall = mempty, --projectConfigReinstall,
616618
installAvoidReinstalls = mempty, --projectConfigAvoidReinstalls,
617619
installOverrideReinstall = mempty, --projectConfigOverrideReinstall,

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

+2
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ data ProjectConfigBuildOnly
136136
projectConfigVerbosity :: Flag Verbosity,
137137
projectConfigDryRun :: Flag Bool,
138138
projectConfigOnlyDeps :: Flag Bool,
139+
projectConfigOnlyDownload :: Flag Bool,
139140
projectConfigSummaryFile :: NubList PathTemplate,
140141
projectConfigLogFile :: Flag PathTemplate,
141142
projectConfigBuildReports :: Flag ReportLevel,
@@ -436,6 +437,7 @@ data BuildTimeSettings
436437
= BuildTimeSettings {
437438
buildSettingDryRun :: Bool,
438439
buildSettingOnlyDeps :: Bool,
440+
buildSettingOnlyDownload :: Bool,
439441
buildSettingSummaryFile :: [PathTemplate],
440442
buildSettingLogFile :: Maybe (Compiler -> Platform
441443
-> PackageId -> UnitId

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

+7
Original file line numberDiff line numberDiff line change
@@ -1623,6 +1623,7 @@ data InstallFlags = InstallFlags {
16231623
installHaddockIndex :: Flag PathTemplate,
16241624
installDest :: Flag Cabal.CopyDest,
16251625
installDryRun :: Flag Bool,
1626+
installOnlyDownload :: Flag Bool,
16261627
installMaxBackjumps :: Flag Int,
16271628
installReorderGoals :: Flag ReorderGoals,
16281629
installCountConflicts :: Flag CountConflicts,
@@ -1665,6 +1666,7 @@ defaultInstallFlags = InstallFlags {
16651666
installHaddockIndex = Flag docIndexFile,
16661667
installDest = Flag Cabal.NoCopyDest,
16671668
installDryRun = Flag False,
1669+
installOnlyDownload = Flag False,
16681670
installMaxBackjumps = Flag defaultMaxBackjumps,
16691671
installReorderGoals = Flag (ReorderGoals False),
16701672
installCountConflicts = Flag (CountConflicts True),
@@ -1878,6 +1880,11 @@ installOptions showOrParseArgs =
18781880
installDryRun (\v flags -> flags { installDryRun = v })
18791881
trueArg
18801882

1883+
, option [] ["only-download"]
1884+
"Do not build anything, only fetch the packages."
1885+
installOnlyDownload (\v flags -> flags { installOnlyDownload = v })
1886+
trueArg
1887+
18811888
, option "" ["target-package-db"]
18821889
"package database to install into. Required when using ${pkgroot} prefix."
18831890
installDest (\v flags -> flags { installDest = v })

cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs

+9-5
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,11 @@ prop_roundtrip_printparse_buildonly config =
201201
hackProjectConfigBuildOnly :: ProjectConfigBuildOnly -> ProjectConfigBuildOnly
202202
hackProjectConfigBuildOnly config =
203203
config {
204-
-- These two fields are only command line transitory things, not
204+
-- These fields are only command line transitory things, not
205205
-- something to be recorded persistently in a config file
206-
projectConfigOnlyDeps = mempty,
207-
projectConfigDryRun = mempty
206+
projectConfigOnlyDeps = mempty,
207+
projectConfigOnlyDownload = mempty,
208+
projectConfigDryRun = mempty
208209
}
209210

210211
prop_roundtrip_printparse_shared :: ProjectConfigShared -> Property
@@ -377,6 +378,7 @@ instance Arbitrary ProjectConfigBuildOnly where
377378
<$> arbitrary
378379
<*> arbitrary
379380
<*> arbitrary
381+
<*> arbitrary
380382
<*> (toNubList <$> shortListOf 2 arbitrary)
381383
<*> arbitrary
382384
<*> arbitrary
@@ -398,6 +400,7 @@ instance Arbitrary ProjectConfigBuildOnly where
398400
shrink ProjectConfigBuildOnly { projectConfigVerbosity = x00
399401
, projectConfigDryRun = x01
400402
, projectConfigOnlyDeps = x02
403+
, projectConfigOnlyDownload = x18
401404
, projectConfigSummaryFile = x03
402405
, projectConfigLogFile = x04
403406
, projectConfigBuildReports = x05
@@ -416,6 +419,7 @@ instance Arbitrary ProjectConfigBuildOnly where
416419
[ ProjectConfigBuildOnly { projectConfigVerbosity = x00'
417420
, projectConfigDryRun = x01'
418421
, projectConfigOnlyDeps = x02'
422+
, projectConfigOnlyDownload = x18'
419423
, projectConfigSummaryFile = x03'
420424
, projectConfigLogFile = x04'
421425
, projectConfigBuildReports = x05'
@@ -434,12 +438,12 @@ instance Arbitrary ProjectConfigBuildOnly where
434438
| ((x00', x01', x02', x03', x04'),
435439
(x05', x06', x07', x08', x09'),
436440
(x10', x11', x12', x14'),
437-
( x17' ))
441+
( x17', x18' ))
438442
<- shrink
439443
((x00, x01, x02, x03, x04),
440444
(x05, x06, x07, x08, preShrink_NumJobs x09),
441445
(x10, x11, x12, x14),
442-
( x17 ))
446+
( x17, x18 ))
443447
]
444448
where
445449
preShrink_NumJobs = fmap (fmap Positive)

changelog.d/only-download

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
synopsis: Add a --only-download flag
2+
packages: cabal-install
3+
prs: #7347
4+
issues: #7323

doc/cabal-project.rst

+25
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,31 @@ package, and thus apply globally:
269269

270270
Specifies the name of the directory of the global package store.
271271

272+
Phase control
273+
-------------
274+
275+
The following settings apply to commands that result in build actions
276+
(``build``, ``run``, ``repl``, ``test``...), and control which phases of the
277+
build are executed.
278+
279+
.. option:: --dry-run
280+
281+
Do not download, build, or install anything, only print what would happen.
282+
283+
.. option:: --only-configure
284+
285+
Instead of performing a full build just run the configure step.
286+
Only accepted by the ``build`` command.
287+
288+
.. option:: --only-download
289+
290+
Do not build anything, only fetch the packages.
291+
292+
.. option:: --only-dependencies
293+
294+
Install only the dependencies necessary to build the given packages.
295+
Not accepted by the ``repl`` command.
296+
272297
Solver configuration options
273298
----------------------------
274299

0 commit comments

Comments
 (0)