@@ -29,7 +29,6 @@ module Distribution.Client.ProjectConfig (
29
29
readGlobalConfig ,
30
30
readProjectLocalExtraConfig ,
31
31
readProjectLocalFreezeConfig ,
32
- parseProjectConfig ,
33
32
reportParseResult ,
34
33
showProjectConfig ,
35
34
withProjectOrGlobalConfig ,
@@ -504,31 +503,33 @@ withProjectOrGlobalConfig' verbosity globalConfigFlag with without = do
504
503
-- file if any, plus other global config.
505
504
--
506
505
readProjectConfig :: Verbosity
506
+ -> HttpTransport
507
507
-> Flag FilePath
508
508
-> DistDirLayout
509
- -> Rebuild ProjectConfig
510
- readProjectConfig verbosity configFileFlag distDirLayout = do
511
- global <- readGlobalConfig verbosity configFileFlag
512
- local <- readProjectLocalConfigOrDefault verbosity distDirLayout
513
- freeze <- readProjectLocalFreezeConfig verbosity distDirLayout
514
- extra <- readProjectLocalExtraConfig verbosity distDirLayout
509
+ -> Rebuild ProjectConfigSkeleton
510
+ readProjectConfig verbosity httpTransport configFileFlag distDirLayout = do
511
+ global <- singletonProjectConfigSkeleton <$> readGlobalConfig verbosity configFileFlag
512
+ local <- readProjectLocalConfigOrDefault verbosity httpTransport distDirLayout
513
+ freeze <- readProjectLocalFreezeConfig verbosity httpTransport distDirLayout
514
+ extra <- readProjectLocalExtraConfig verbosity httpTransport distDirLayout
515
515
return (global <> local <> freeze <> extra)
516
516
517
517
518
518
-- | Reads an explicit @cabal.project@ file in the given project root dir,
519
519
-- or returns the default project config for an implicitly defined project.
520
520
--
521
521
readProjectLocalConfigOrDefault :: Verbosity
522
+ -> HttpTransport
522
523
-> DistDirLayout
523
- -> Rebuild ProjectConfig
524
- readProjectLocalConfigOrDefault verbosity distDirLayout = do
524
+ -> Rebuild ProjectConfigSkeleton
525
+ readProjectLocalConfigOrDefault verbosity httpTransport distDirLayout = do
525
526
usesExplicitProjectRoot <- liftIO $ doesFileExist projectFile
526
527
if usesExplicitProjectRoot
527
528
then do
528
- readProjectFile verbosity distDirLayout " " " project file"
529
+ readProjectFileSkeleton verbosity httpTransport distDirLayout " " " project file"
529
530
else do
530
531
monitorFiles [monitorNonExistentFile projectFile]
531
- return defaultImplicitProjectConfig
532
+ return (singletonProjectConfigSkeleton defaultImplicitProjectConfig)
532
533
533
534
where
534
535
projectFile :: FilePath
@@ -547,66 +548,43 @@ readProjectLocalConfigOrDefault verbosity distDirLayout = do
547
548
-- or returns empty. This file gets written by @cabal configure@, or in
548
549
-- principle can be edited manually or by other tools.
549
550
--
550
- readProjectLocalExtraConfig :: Verbosity -> DistDirLayout
551
- -> Rebuild ProjectConfig
552
- readProjectLocalExtraConfig verbosity distDirLayout =
553
- readProjectFile verbosity distDirLayout " local"
551
+ readProjectLocalExtraConfig :: Verbosity -> HttpTransport -> DistDirLayout
552
+ -> Rebuild ProjectConfigSkeleton
553
+ readProjectLocalExtraConfig verbosity httpTransport distDirLayout =
554
+ readProjectFileSkeleton verbosity httpTransport distDirLayout " local"
554
555
" project local configuration file"
555
556
556
557
-- | Reads a @cabal.project.freeze@ file in the given project root dir,
557
558
-- or returns empty. This file gets written by @cabal freeze@, or in
558
559
-- principle can be edited manually or by other tools.
559
560
--
560
- readProjectLocalFreezeConfig :: Verbosity -> DistDirLayout
561
- -> Rebuild ProjectConfig
562
- readProjectLocalFreezeConfig verbosity distDirLayout =
563
- readProjectFile verbosity distDirLayout " freeze"
561
+ readProjectLocalFreezeConfig :: Verbosity -> HttpTransport -> DistDirLayout
562
+ -> Rebuild ProjectConfigSkeleton
563
+ readProjectLocalFreezeConfig verbosity httpTransport distDirLayout =
564
+ readProjectFileSkeleton verbosity httpTransport distDirLayout " freeze"
564
565
" project freeze file"
565
566
566
- -- | Reads a named config file in the given project root dir, or returns empty.
567
+ -- | Reads a named extended (with imports and conditionals) config file in the given project root dir, or returns empty.
567
568
--
568
- readProjectFile :: Verbosity
569
- -> DistDirLayout
570
- -> String
571
- -> String
572
- -> Rebuild ProjectConfig
573
- readProjectFile verbosity DistDirLayout {distProjectFile}
569
+ readProjectFileSkeleton :: Verbosity -> HttpTransport -> DistDirLayout -> String -> String -> Rebuild ProjectConfigSkeleton
570
+ readProjectFileSkeleton verbosity httpTransport DistDirLayout {distProjectFile, distDownloadSrcDirectory}
574
571
extensionName extensionDescription = do
575
572
exists <- liftIO $ doesFileExist extensionFile
576
573
if exists
577
574
then do monitorFiles [monitorFileHashed extensionFile]
578
- addProjectFileProvenance <$> liftIO readExtensionFile
575
+ pcs <- liftIO readExtensionFile
576
+ monitorFiles $ map monitorFileHashed (projectSkeletonImports pcs)
577
+ pure pcs
579
578
else do monitorFiles [monitorNonExistentFile extensionFile]
580
579
return mempty
581
580
where
582
- extensionFile :: FilePath
583
581
extensionFile = distProjectFile extensionName
584
582
585
- readExtensionFile :: IO ProjectConfig
586
583
readExtensionFile =
587
584
reportParseResult verbosity extensionDescription extensionFile
588
- . (parseProjectConfig extensionFile)
585
+ =<< parseProjectSkeleton distDownloadSrcDirectory httpTransport verbosity [] extensionFile
589
586
=<< BS. readFile extensionFile
590
587
591
- addProjectFileProvenance :: ProjectConfig -> ProjectConfig
592
- addProjectFileProvenance config =
593
- config {
594
- projectConfigProvenance =
595
- Set. insert (Explicit extensionFile) (projectConfigProvenance config)
596
- }
597
-
598
-
599
- -- | Parse the 'ProjectConfig' format.
600
- --
601
- -- For the moment this is implemented in terms of parsers for legacy
602
- -- configuration types, plus a conversion.
603
- --
604
- parseProjectConfig :: FilePath -> BS. ByteString -> OldParser. ParseResult ProjectConfig
605
- parseProjectConfig source content =
606
- convertLegacyProjectConfig <$>
607
- (parseLegacyProjectConfig source content)
608
-
609
-
610
588
-- | Render the 'ProjectConfig' format.
611
589
--
612
590
-- For the moment this is implemented in terms of a pretty printer for the
@@ -647,12 +625,12 @@ readGlobalConfig verbosity configFileFlag = do
647
625
monitorFiles [monitorFileHashed configFile]
648
626
return (convertLegacyGlobalConfig config)
649
627
650
- reportParseResult :: Verbosity -> String -> FilePath -> OldParser. ParseResult a -> IO a
628
+ reportParseResult :: Verbosity -> String -> FilePath -> OldParser. ParseResult ProjectConfigSkeleton -> IO ProjectConfigSkeleton
651
629
reportParseResult verbosity _filetype filename (OldParser. ParseOk warnings x) = do
652
- unless (null warnings) $
653
- let msg = unlines (map (OldParser. showPWarning filename) warnings)
630
+ unless (null warnings) $
631
+ let msg = unlines (map (OldParser. showPWarning (intercalate " , " $ filename : projectSkeletonImports x) ) warnings)
654
632
in warn verbosity msg
655
- return x
633
+ return x
656
634
reportParseResult verbosity filetype filename (OldParser. ParseFailed err) =
657
635
let (line, msg) = OldParser. locatedErrorMsg err
658
636
in die' verbosity $ " Error parsing " ++ filetype ++ " " ++ filename
0 commit comments