@@ -47,9 +47,9 @@ import Stack.Types.CompilerPaths
47
47
( CompilerPaths (.. ), HasCompiler (.. ) )
48
48
import Stack.Types.ConfigureOpts ( BaseConfigOpts (.. ) )
49
49
import Stack.Types.BuildOpts ( BuildOpts (.. ), HaddockOpts (.. ) )
50
- import Stack.Types.BuildOptsCLI ( BuildOptsCLI (.. ) )
50
+ import Stack.Types.BuildOptsCLI ( BuildOptsCLI (.. ), BuildSubset ( BSOnlyDependencies , BSOnlySnapshot ) )
51
51
import Stack.Types.DumpPackage ( DumpPackage (.. ) )
52
- import Stack.Types.EnvConfig ( HasEnvConfig (.. ) )
52
+ import Stack.Types.EnvConfig ( EnvConfig ( .. ), HasEnvConfig (.. ) )
53
53
import Stack.Types.GhcPkgId ( GhcPkgId )
54
54
import Stack.Types.InterfaceOpt ( InterfaceOpt (.. ) )
55
55
import Stack.Types.Package
@@ -397,14 +397,17 @@ generateLocalHaddockForHackageArchives ::
397
397
(HasEnvConfig env , HasTerm env )
398
398
=> [LocalPackage ]
399
399
-> RIO env ()
400
- generateLocalHaddockForHackageArchives =
401
- mapM_
402
- ( \ lp ->
403
- let pkg = lp. package
404
- pkgId = PackageIdentifier pkg. name pkg. version
405
- pkgDir = parent lp. cabalFP
406
- in generateLocalHaddockForHackageArchive pkgDir pkgId
407
- )
400
+ generateLocalHaddockForHackageArchives lps = do
401
+ buildSubset <- view $ envConfigL . to (. buildOptsCLI. buildSubset)
402
+ let localsExcluded =
403
+ buildSubset == BSOnlyDependencies || buildSubset == BSOnlySnapshot
404
+ unless localsExcluded $
405
+ forM_ lps $ \ lp ->
406
+ let pkg = lp. package
407
+ pkgId = PackageIdentifier pkg. name pkg. version
408
+ pkgDir = parent lp. cabalFP
409
+ in when lp. wanted $
410
+ generateLocalHaddockForHackageArchive pkgDir pkgId
408
411
409
412
-- | Generate an archive file containing local Haddock documentation for
410
413
-- Hackage, in a form accepted by Hackage.
@@ -428,15 +431,22 @@ generateLocalHaddockForHackageArchive pkgDir pkgId = do
428
431
)
429
432
tarGzFile = distDir </> tarGzFileName
430
433
docDir = distDir </> docDirSuffix </> htmlDirSuffix
431
- createTarGzFile tarGzFile docDir nameRelDir
432
- prettyInfo $
433
- fillSep
434
- [ flow " Archive of Haddock documentation for Hackage for"
435
- , style Current (fromString pkgIdName)
436
- , flow " created at:"
437
- ]
438
- <> line
439
- <> pretty tarGzFile
434
+ tarGzFileCreated <- createTarGzFile tarGzFile docDir nameRelDir
435
+ if tarGzFileCreated
436
+ then
437
+ prettyInfo $
438
+ fillSep
439
+ [ flow " Archive of Haddock documentation for Hackage for"
440
+ , style Current (fromString pkgIdName)
441
+ , flow " created at:"
442
+ ]
443
+ <> line
444
+ <> pretty tarGzFile
445
+ else
446
+ prettyWarnL
447
+ [ flow " No Haddock documentation for Hackage available for"
448
+ , style Error (fromString pkgIdName) <> " ."
449
+ ]
440
450
441
451
createTarGzFile ::
442
452
Path Abs File
@@ -445,10 +455,19 @@ createTarGzFile ::
445
455
-- ^ Base directory
446
456
-> Path Rel Dir
447
457
-- ^ Directory to archive, relative to base directory
448
- -> RIO env ()
458
+ -> RIO env Bool
449
459
createTarGzFile tar base dir = do
450
- entries <- liftIO $ Tar. pack base' [dir']
451
- BL. writeFile tar' $ GZip. compress $ Tar. write entries
460
+ dirExists <- doesDirExist $ base </> dir
461
+ if dirExists
462
+ then do
463
+ entries <- liftIO $ Tar. pack base' [dir']
464
+ if null entries
465
+ then pure False
466
+ else do
467
+ ensureDir $ parent tar
468
+ BL. writeFile tar' $ GZip. compress $ Tar. write entries
469
+ pure True
470
+ else pure False
452
471
where
453
472
base' = fromAbsDir base
454
473
dir' = fromRelDir dir
0 commit comments