Skip to content

Commit 4067f93

Browse files
authored
Merge pull request #9276 from SuganyaAK/Subsequent-Cabal-Install-Errors
Subsequent Cabal-install package errors
2 parents a0538d9 + 21598ef commit 4067f93

File tree

27 files changed

+375
-221
lines changed

27 files changed

+375
-221
lines changed

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import Distribution.Client.CmdErrorMessages
2626
, targetSelectorFilter
2727
, targetSelectorPluralPkgs
2828
)
29+
import Distribution.Client.Errors
2930
import Distribution.Client.NixStyleOptions
3031
( NixStyleFlags (..)
3132
, defaultNixStyleFlags
@@ -50,7 +51,7 @@ import Distribution.Simple.Flag
5051
( fromFlagOrDefault
5152
)
5253
import Distribution.Simple.Utils
53-
( die'
54+
( dieWithException
5455
, warn
5556
, wrapText
5657
)
@@ -119,10 +120,7 @@ benchAction flags@NixStyleFlags{..} targetStrings globalFlags = do
119120
buildCtx <-
120121
runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do
121122
when (buildSettingOnlyDeps (buildSettings baseCtx)) $
122-
die' verbosity $
123-
"The bench command does not support '--only-dependencies'. "
124-
++ "You may wish to use 'build --only-dependencies' and then "
125-
++ "use 'bench'."
123+
dieWithException verbosity BenchActionException
126124

127125
fullArgs <- getFullArgs
128126
when ("+RTS" `elem` fullArgs) $
@@ -251,7 +249,7 @@ isSubComponentProblem pkgid name subcomponent =
251249

252250
reportTargetProblems :: Verbosity -> [BenchTargetProblem] -> IO a
253251
reportTargetProblems verbosity =
254-
die' verbosity . unlines . map renderBenchTargetProblem
252+
dieWithException verbosity . RenderBenchTargetProblem . map renderBenchTargetProblem
255253

256254
renderBenchTargetProblem :: BenchTargetProblem -> String
257255
renderBenchTargetProblem (TargetProblemNoTargets targetSelector) =

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import Distribution.Client.TargetProblem
2626
, TargetProblem'
2727
)
2828

29+
import qualified Data.Map as Map
30+
import Distribution.Client.Errors
2931
import Distribution.Client.NixStyleOptions
3032
( NixStyleFlags (..)
3133
, defaultNixStyleFlags
@@ -49,15 +51,13 @@ import Distribution.Simple.Command
4951
)
5052
import Distribution.Simple.Flag (Flag (..), fromFlag, fromFlagOrDefault, toFlag)
5153
import Distribution.Simple.Utils
52-
( die'
54+
( dieWithException
5355
, wrapText
5456
)
5557
import Distribution.Verbosity
5658
( normal
5759
)
5860

59-
import qualified Data.Map as Map
60-
6161
buildCommand :: CommandUI (NixStyleFlags BuildFlags)
6262
buildCommand =
6363
CommandUI
@@ -237,4 +237,4 @@ reportBuildTargetProblems verbosity problems =
237237

238238
reportCannotPruneDependencies :: Verbosity -> CannotPruneDependencies -> IO a
239239
reportCannotPruneDependencies verbosity =
240-
die' verbosity . renderCannotPruneDependencies
240+
dieWithException verbosity . ReportCannotPruneDependencies . renderCannotPruneDependencies

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Distribution.Client.DistDirLayout
1212
( DistDirLayout (..)
1313
, defaultDistDirLayout
1414
)
15+
import Distribution.Client.Errors
1516
import Distribution.Client.ProjectConfig
1617
( findProjectRoot
1718
)
@@ -35,7 +36,7 @@ import Distribution.Simple.Setup
3536
, toFlag
3637
)
3738
import Distribution.Simple.Utils
38-
( die'
39+
( dieWithException
3940
, handleDoesNotExist
4041
, info
4142
, wrapText
@@ -141,9 +142,8 @@ cleanAction CleanFlags{..} extraArgs _ = do
141142
-- For now assume all files passed are the names of scripts
142143
notScripts <- filterM (fmap not . doesFileExist) extraArgs
143144
unless (null notScripts) $
144-
die' verbosity $
145-
"'clean' extra arguments should be script files: "
146-
++ unwords notScripts
145+
dieWithException verbosity $
146+
CleanAction notScripts
147147

148148
projectRoot <- either throwIO return =<< findProjectRoot verbosity mprojectDir mprojectFile
149149

cabal-install/src/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import Prelude ()
1111

1212
import Network.URI (URI, parseURI)
1313

14+
import Distribution.Client.Errors
1415
import Distribution.Client.TargetSelector
1516
import Distribution.Client.Types
1617
import Distribution.Compat.CharParsing (char, optional)
1718
import Distribution.Package
1819
import Distribution.Simple.LocalBuildInfo (ComponentName (CExeName))
19-
import Distribution.Simple.Utils (die')
20+
import Distribution.Simple.Utils (dieWithException)
2021
import Distribution.Solver.Types.PackageConstraint (PackageProperty (..))
2122
import Distribution.Version
2223

@@ -32,7 +33,7 @@ parseWithoutProjectTargetSelector verbosity input =
3233
Right ts -> return ts
3334
Left err -> case parseURI input of
3435
Just uri -> return (WoURI uri)
35-
Nothing -> die' verbosity $ "Invalid package ID: " ++ input ++ "\n" ++ err
36+
Nothing -> dieWithException verbosity $ ProjectTargetSelector input err
3637
where
3738
parser :: CabalParsing m => m WithoutProjectTargetSelector
3839
parser = do

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

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ import Distribution.Simple.Setup
116116
)
117117
import Distribution.Simple.Utils
118118
( debug
119-
, die'
119+
, dieWithException
120120
, notice
121121
, tryFindPackageDesc
122122
)
@@ -151,6 +151,7 @@ import Distribution.Version
151151
)
152152

153153
import qualified Data.Set as S
154+
import Distribution.Client.Errors
154155
import System.Directory
155156
( doesFileExist
156157
, getCurrentDirectory
@@ -315,8 +316,7 @@ outdatedAction (ProjectFlags{flagProjectDir, flagProjectFile}, OutdatedFlags{..}
315316
configFlags = savedConfigureFlags config
316317
withRepoContext verbosity globalFlags' $ \repoContext -> do
317318
when (not newFreezeFile && (isJust mprojectDir || isJust mprojectFile)) $
318-
die' verbosity $
319-
"--project-dir and --project-file must only be used with --v2-freeze-file."
319+
dieWithException verbosity OutdatedAction
320320

321321
sourcePkgDb <- IndexUtils.getSourcePackages verbosity repoContext
322322
(comp, platform, _progdb) <- configCompilerAux' configFlags
@@ -425,14 +425,9 @@ depsFromNewFreezeFile verbosity httpTransport compiler (Platform arch os) mproje
425425
freezeFileExists <- doesFileExist freezeFile
426426

427427
unless freezeFileExists $
428-
die' verbosity $
429-
"Couldn't find a freeze file expected at: "
430-
++ freezeFile
431-
++ "\n\n"
432-
++ "We are looking for this file because you supplied '--project-file' or '--v2-freeze-file'. "
433-
++ "When one of these flags is given, we try to read the dependencies from a freeze file. "
434-
++ "If it is undesired behaviour, you should not use these flags, otherwise please generate "
435-
++ "a freeze file via 'cabal freeze'."
428+
dieWithException verbosity $
429+
FreezeFileExistsErr freezeFile
430+
436431
debug verbosity $
437432
"Reading the list of dependencies from the new-style freeze file " ++ freezeFile
438433
return deps
@@ -454,7 +449,7 @@ depsFromPkgDesc verbosity comp platform = do
454449
[]
455450
gpd
456451
case epd of
457-
Left _ -> die' verbosity "finalizePD failed"
452+
Left _ -> dieWithException verbosity FinalizePDFailed
458453
Right (pd, _) -> do
459454
let bd = allBuildDepends pd
460455
debug

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

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import Distribution.Client.CmdErrorMessages
3838
import Distribution.Client.DistDirLayout
3939
( DistDirLayout (..)
4040
)
41+
import Distribution.Client.Errors
4142
import qualified Distribution.Client.InstallPlan as InstallPlan
4243
import Distribution.Client.NixStyleOptions
4344
( NixStyleFlags (..)
@@ -106,7 +107,7 @@ import Distribution.Simple.Setup
106107
import Distribution.Simple.Utils
107108
( TempFileOptions (..)
108109
, debugNoWrap
109-
, die'
110+
, dieWithException
110111
, withTempDirectoryEx
111112
, wrapText
112113
)
@@ -284,21 +285,16 @@ replAction :: NixStyleFlags ReplFlags -> [String] -> GlobalFlags -> IO ()
284285
replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings globalFlags =
285286
withContextAndSelectors AcceptNoTargets (Just LibKind) flags targetStrings globalFlags ReplCommand $ \targetCtx ctx targetSelectors -> do
286287
when (buildSettingOnlyDeps (buildSettings ctx)) $
287-
die' verbosity $
288-
"The repl command does not support '--only-dependencies'. "
289-
++ "You may wish to use 'build --only-dependencies' and then "
290-
++ "use 'repl'."
291-
288+
dieWithException verbosity ReplCommandDoesn'tSupport
292289
let projectRoot = distProjectRootDirectory $ distDirLayout ctx
293290
distDir = distDirectory $ distDirLayout ctx
294291

295292
baseCtx <- case targetCtx of
296293
ProjectContext -> return ctx
297294
GlobalContext -> do
298295
unless (null targetStrings) $
299-
die' verbosity $
300-
"'repl' takes no arguments or a script argument outside a project: " ++ unwords targetStrings
301-
296+
dieWithException verbosity $
297+
ReplTakesNoArguments targetStrings
302298
let
303299
sourcePackage =
304300
fakeProjectSourcePackage projectRoot
@@ -315,12 +311,12 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g
315311
updateContextAndWriteProjectFile' ctx sourcePackage
316312
ScriptContext scriptPath scriptExecutable -> do
317313
unless (length targetStrings == 1) $
318-
die' verbosity $
319-
"'repl' takes a single argument which should be a script: " ++ unwords targetStrings
314+
dieWithException verbosity $
315+
ReplTakesSingleArgument targetStrings
320316
existsScriptPath <- doesFileExist scriptPath
321317
unless existsScriptPath $
322-
die' verbosity $
323-
"'repl' takes a single argument which should be a script: " ++ unwords targetStrings
318+
dieWithException verbosity $
319+
ReplTakesSingleArgument targetStrings
324320

325321
updateContextAndWriteProjectFile ctx scriptPath scriptExecutable
326322

@@ -750,7 +746,7 @@ multipleTargetsProblem decision = CustomTargetProblem . TargetProblemMultipleTar
750746

751747
reportTargetProblems :: Verbosity -> [TargetProblem ReplProblem] -> IO a
752748
reportTargetProblems verbosity =
753-
die' verbosity . unlines . map renderReplTargetProblem
749+
dieWithException verbosity . RenderReplTargetProblem . map renderReplTargetProblem
754750

755751
renderReplTargetProblem :: TargetProblem ReplProblem -> String
756752
renderReplTargetProblem = renderTargetProblem "open a repl for" renderReplProblem

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

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ module Distribution.Client.CmdRun
2222
import Distribution.Client.Compat.Prelude hiding (toList)
2323
import Prelude ()
2424

25+
import Data.List (group)
26+
import qualified Data.Set as Set
2527
import Distribution.Client.CmdErrorMessages
2628
( plural
2729
, renderListCommaAnd
@@ -33,6 +35,7 @@ import Distribution.Client.CmdErrorMessages
3335
, targetSelectorFilter
3436
, targetSelectorPluralPkgs
3537
)
38+
import Distribution.Client.Errors
3639
import Distribution.Client.GlobalFlags
3740
( defaultGlobalFlags
3841
)
@@ -85,7 +88,7 @@ import Distribution.Simple.Program.Run
8588
, runProgramInvocation
8689
)
8790
import Distribution.Simple.Utils
88-
( die'
91+
( dieWithException
8992
, info
9093
, notice
9194
, safeHead
@@ -106,9 +109,6 @@ import Distribution.Verbosity
106109
( normal
107110
, silent
108111
)
109-
110-
import Data.List (group)
111-
import qualified Data.Set as Set
112112
import GHC.Environment
113113
( getFullArgs
114114
)
@@ -190,10 +190,7 @@ runAction flags@NixStyleFlags{..} targetAndArgs globalFlags =
190190
buildCtx <-
191191
runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do
192192
when (buildSettingOnlyDeps (buildSettings baseCtx)) $
193-
die' verbosity $
194-
"The run command does not support '--only-dependencies'. "
195-
++ "You may wish to use 'build --only-dependencies' and then "
196-
++ "use 'run'."
193+
dieWithException verbosity NoSupportForRunCommand
197194

198195
fullArgs <- getFullArgs
199196
when (occursOnlyOrBefore fullArgs "+RTS" "--") $
@@ -236,9 +233,7 @@ runAction flags@NixStyleFlags{..} targetAndArgs globalFlags =
236233
(selectedUnitId, selectedComponent) <-
237234
-- Slight duplication with 'runProjectPreBuildPhase'.
238235
singleExeOrElse
239-
( die' verbosity $
240-
"No or multiple targets given, but the run "
241-
++ "phase has been reached. This is a bug."
236+
( dieWithException verbosity RunPhaseReached
242237
)
243238
$ targetsMap buildCtx
244239

@@ -268,12 +263,7 @@ runAction flags@NixStyleFlags{..} targetAndArgs globalFlags =
268263
-- an error in all of these cases, even if some seem like they
269264
-- shouldn't happen.
270265
pkg <- case matchingElaboratedConfiguredPackages of
271-
[] ->
272-
die' verbosity $
273-
"Unknown executable "
274-
++ exeName
275-
++ " in package "
276-
++ prettyShow selectedUnitId
266+
[] -> dieWithException verbosity $ UnknownExecutable exeName selectedUnitId
277267
[elabPkg] -> do
278268
info verbosity $
279269
"Selecting "
@@ -282,11 +272,8 @@ runAction flags@NixStyleFlags{..} targetAndArgs globalFlags =
282272
++ exeName
283273
return elabPkg
284274
elabPkgs ->
285-
die' verbosity $
286-
"Multiple matching executables found matching "
287-
++ exeName
288-
++ ":\n"
289-
++ unlines (fmap (\p -> " - in package " ++ prettyShow (elabUnitId p)) elabPkgs)
275+
dieWithException verbosity $
276+
MultipleMatchingExecutables exeName (fmap (\p -> " - in package " ++ prettyShow (elabUnitId p)) elabPkgs)
290277

291278
let defaultExePath =
292279
binDirectoryFor
@@ -489,7 +476,7 @@ isSubComponentProblem pkgid name subcomponent =
489476

490477
reportTargetProblems :: Verbosity -> [RunTargetProblem] -> IO a
491478
reportTargetProblems verbosity =
492-
die' verbosity . unlines . map renderRunTargetProblem
479+
dieWithException verbosity . CmdRunReportTargetProblems . unlines . map renderRunTargetProblem
493480

494481
renderRunTargetProblem :: RunTargetProblem -> String
495482
renderRunTargetProblem (TargetProblemNoTargets targetSelector) =

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ import Distribution.Simple.Flag
7272
( fromFlagOrDefault
7373
)
7474
import Distribution.Simple.Utils
75-
( die'
75+
( dieWithException
7676
, notice
7777
, noticeNoWrap
7878
, warn
@@ -97,6 +97,7 @@ import Distribution.Simple.Command
9797
)
9898
import System.FilePath (dropExtension, (<.>))
9999

100+
import Distribution.Client.Errors
100101
import Distribution.Client.IndexUtils.Timestamp (nullTimestamp)
101102
import qualified Hackage.Security.Client as Sec
102103

@@ -179,8 +180,7 @@ updateAction flags@NixStyleFlags{..} extraArgs globalFlags = do
179180
parseArg s = case simpleParsec s of
180181
Just r -> return r
181182
Nothing ->
182-
die' verbosity $
183-
"'v2-update' unable to parse repo: \"" ++ s ++ "\""
183+
dieWithException verbosity $ UnableToParseRepo s
184184

185185
updateRepoRequests <- traverse parseArg extraArgs
186186

@@ -190,11 +190,8 @@ updateAction flags@NixStyleFlags{..} extraArgs globalFlags = do
190190
[ r | (UpdateRequest r _) <- updateRepoRequests, not (r `elem` remoteRepoNames)
191191
]
192192
unless (null unknownRepos) $
193-
die' verbosity $
194-
"'v2-update' repo(s): \""
195-
++ intercalate "\", \"" (map unRepoName unknownRepos)
196-
++ "\" can not be found in known remote repo(s): "
197-
++ intercalate ", " (map unRepoName remoteRepoNames)
193+
dieWithException verbosity $
194+
NullUnknownrepos (map unRepoName unknownRepos) (map unRepoName remoteRepoNames)
198195

199196
let reposToUpdate :: [(Repo, RepoIndexState)]
200197
reposToUpdate = case updateRepoRequests of

0 commit comments

Comments
 (0)