Skip to content

Commit 8f42d3f

Browse files
authored
Merge pull request #6439 from phadej/install-plan-internalerror-master
Improve few internalErrors in InstallPlan
2 parents b3c7982 + a6a1d9f commit 8f42d3f

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

cabal-install/Distribution/Client/InstallPlan.hs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ module Distribution.Client.InstallPlan (
6969

7070
import Distribution.Client.Compat.Prelude hiding (toList, lookup, tail)
7171
import Prelude (tail)
72+
import Distribution.Compat.Stack (WithCallStack)
7273

7374
import Distribution.Client.Types hiding (BuildOutcomes)
7475
import qualified Distribution.PackageDescription as PD
@@ -83,6 +84,7 @@ import Distribution.Package
8384
import Distribution.Solver.Types.SolverPackage
8485
import Distribution.Client.JobControl
8586
import Distribution.Deprecated.Text
87+
import Distribution.Pretty (prettyShow)
8688
import Text.PrettyPrint
8789
import qualified Distribution.Client.SolverInstallPlan as SolverInstallPlan
8890
import Distribution.Client.SolverInstallPlan (SolverInstallPlan)
@@ -165,6 +167,11 @@ data GenericPlanPackage ipkg srcpkg
165167
| Installed srcpkg
166168
deriving (Eq, Show, Generic)
167169

170+
displayGenericPlanPackage :: (IsUnit ipkg, IsUnit srcpkg) => GenericPlanPackage ipkg srcpkg -> String
171+
displayGenericPlanPackage (PreExisting pkg) = "PreExisting " ++ prettyShow (nodeKey pkg)
172+
displayGenericPlanPackage (Configured pkg) = "Configured " ++ prettyShow (nodeKey pkg)
173+
displayGenericPlanPackage (Installed pkg) = "Installed " ++ prettyShow (nodeKey pkg)
174+
168175
-- | Convenience combinator for destructing 'GenericPlanPackage'.
169176
-- This is handy because if you case manually, you have to handle
170177
-- 'Configured' and 'Installed' separately (where often you want
@@ -249,7 +256,7 @@ mkInstallPlan loc graph indepGoals =
249256
planIndepGoals = indepGoals
250257
}
251258

252-
internalError :: String -> String -> a
259+
internalError :: WithCallStack (String -> String -> a)
253260
internalError loc msg = error $ "internal error in InstallPlan." ++ loc
254261
++ if null msg then "" else ": " ++ msg
255262

@@ -619,7 +626,7 @@ isInstalled _ = False
619626
-- and return any packages that are newly in the processing state (ie ready to
620627
-- process), along with the updated 'Processing' state.
621628
--
622-
completed :: (IsUnit ipkg, IsUnit srcpkg)
629+
completed :: forall ipkg srcpkg. (IsUnit ipkg, IsUnit srcpkg)
623630
=> GenericInstallPlan ipkg srcpkg
624631
-> Processing -> UnitId
625632
-> ([GenericReadyPackage srcpkg], Processing)
@@ -644,8 +651,9 @@ completed plan (Processing processingSet completedSet failedSet) pkgid =
644651
(map nodeKey newlyReady)
645652
processing' = Processing processingSet' completedSet' failedSet
646653

647-
asReadyPackage (Configured pkg) = ReadyPackage pkg
648-
asReadyPackage _ = internalError "completed" ""
654+
asReadyPackage :: GenericPlanPackage ipkg srcpkg -> GenericReadyPackage srcpkg
655+
asReadyPackage (Configured pkg) = ReadyPackage pkg
656+
asReadyPackage pkg = internalError "completed" $ "not in configured state: " ++ displayGenericPlanPackage pkg
649657

650658
failed :: (IsUnit ipkg, IsUnit srcpkg)
651659
=> GenericInstallPlan ipkg srcpkg
@@ -671,7 +679,7 @@ failed plan (Processing processingSet completedSet failedSet) pkgid =
671679
processing' = Processing processingSet' completedSet failedSet'
672680

673681
asConfiguredPackage (Configured pkg) = pkg
674-
asConfiguredPackage _ = internalError "failed" "not in configured state"
682+
asConfiguredPackage pkg = internalError "failed" $ "not in configured state: " ++ displayGenericPlanPackage pkg
675683

676684
processingInvariant :: (IsUnit ipkg, IsUnit srcpkg)
677685
=> GenericInstallPlan ipkg srcpkg

0 commit comments

Comments
 (0)