Skip to content

Commit ab1e0db

Browse files
authored
Merge pull request #4540 from commercialhaskell/error-on-curator-check-failure
Broken dependency graph as an error giving error exit code in curator
2 parents e19e8b8 + 9132b4b commit ab1e0db

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

subs/curator/src/Curator/Snapshot.hs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import Distribution.Types.VersionRange (withinRange, VersionRange)
2020
import Pantry
2121
import Path.IO (resolveFile')
2222
import RIO hiding (display)
23-
import qualified RIO
2423
import RIO.List (find, partition)
2524
import qualified RIO.Map as Map
2625
import RIO.PrettyPrint
@@ -160,13 +159,27 @@ checkDependencyGraph constraints snapshot = do
160159
<> Map.map (, []) ghcBootPackages
161160
return $ Map.mapWithKey (validateDeps constraints depTree cabalVersion) pkgInfos
162161
let (rangeErrors, otherErrors) = splitErrors pkgErrors
163-
unless (Map.null rangeErrors && Map.null otherErrors) $ do
164-
logWarn "Errors in snapshot:"
165-
void $ flip Map.traverseWithKey rangeErrors $ \(dep, maintainers, mver) users -> do
166-
logWarn $ RIO.display (pkgBoundsError dep maintainers mver users)
167-
void $ flip Map.traverseWithKey otherErrors $ \pname errors -> do
168-
logWarn $ fromString (packageNameString pname)
169-
forM_ errors $ \err -> logWarn $ " " <> fromString err
162+
unless (Map.null rangeErrors && Map.null otherErrors) $
163+
throwM (BrokenDependencyGraph rangeErrors otherErrors)
164+
165+
data BrokenDependencyGraph = BrokenDependencyGraph
166+
(Map (PackageName, Set Text, Maybe Version) (Map DependingPackage DepBounds))
167+
(Map PackageName (Seq String))
168+
169+
instance Exception BrokenDependencyGraph
170+
171+
instance Show BrokenDependencyGraph where
172+
show (BrokenDependencyGraph rangeErrors otherErrors) = T.unpack . T.unlines $
173+
"Snapshot dependency graph contains errors:" :
174+
shownBoundsErrors <>
175+
shownOtherErrors
176+
where
177+
shownBoundsErrors =
178+
flip map (Map.toList rangeErrors) $ \((dep, maintainers, mver), users) ->
179+
pkgBoundsError dep maintainers mver users
180+
shownOtherErrors = flip map (Map.toList otherErrors) $ \(pname, errors) -> T.unlines $
181+
T.pack (packageNameString pname) :
182+
flip map (toList errors) (\err -> " " <> fromString err)
170183

171184
pkgBoundsError ::
172185
PackageName

0 commit comments

Comments
 (0)