Skip to content

Commit 0642015

Browse files
committed
Merge pull request #2853 from grayjay/missing-dependencies
Always warn when 'cabal install' cannot find a dependency
2 parents 70ce894 + 9f22840 commit 0642015

File tree

1 file changed

+19
-2
lines changed
  • cabal-install/Distribution/Client/Dependency/Modular

1 file changed

+19
-2
lines changed

cabal-install/Distribution/Client/Dependency/Modular/Message.hs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,40 @@ data Message =
4040
showMessages :: ([Var QPN] -> Bool) -> Bool -> [Message] -> [String]
4141
showMessages p sl = go [] 0
4242
where
43+
-- The stack 'v' represents variables that are currently assigned by the
44+
-- solver. 'go' pushes a variable for a recursive call when it encounters
45+
-- 'TryP', 'TryF', or 'TryS' and pops a variable when it encounters 'Leave'.
46+
-- When 'go' processes a package goal, or a package goal followed by a
47+
-- 'Failure', it calls 'atLevel' with the goal variable at the head of the
48+
-- stack so that the predicate can also select messages relating to package
49+
-- goal choices.
4350
go :: [Var QPN] -> Int -> [Message] -> [String]
4451
go _ _ [] = []
4552
-- complex patterns
4653
go v l (TryP qpn i : Enter : Failure c fr : Leave : ms) = goPReject v l qpn [i] c fr ms
4754
go v l (TryF qfn b : Enter : Failure c fr : Leave : ms) = (atLevel (add (F qfn) v) l $ "rejecting: " ++ showQFNBool qfn b ++ showFR c fr) (go v l ms)
4855
go v l (TryS qsn b : Enter : Failure c fr : Leave : ms) = (atLevel (add (S qsn) v) l $ "rejecting: " ++ showQSNBool qsn b ++ showFR c fr) (go v l ms)
4956
go v l (Next (Goal (P qpn) gr) : TryP qpn' i : ms@(Enter : Next _ : _)) = (atLevel (add (P qpn) v) l $ "trying: " ++ showQPNPOpt qpn' i ++ showGRs gr) (go (add (P qpn) v) l ms)
57+
go v l (Next (Goal (P qpn) gr) : Failure c fr : ms) =
58+
let v' = add (P qpn) v
59+
in (atLevel v' l $ showPackageGoal qpn gr) $ (atLevel v' l $ showFailure c fr) (go v l ms)
5060
go v l (Failure c Backjump : ms@(Leave : Failure c' Backjump : _)) | c == c' = go v l ms
5161
-- standard display
5262
go v l (Enter : ms) = go v (l+1) ms
5363
go v l (Leave : ms) = go (drop 1 v) (l-1) ms
5464
go v l (TryP qpn i : ms) = (atLevel (add (P qpn) v) l $ "trying: " ++ showQPNPOpt qpn i) (go (add (P qpn) v) l ms)
5565
go v l (TryF qfn b : ms) = (atLevel (add (F qfn) v) l $ "trying: " ++ showQFNBool qfn b) (go (add (F qfn) v) l ms)
5666
go v l (TryS qsn b : ms) = (atLevel (add (S qsn) v) l $ "trying: " ++ showQSNBool qsn b) (go (add (S qsn) v) l ms)
57-
go v l (Next (Goal (P qpn) gr) : ms) = (atLevel (add (P qpn) v) l $ "next goal: " ++ showQPN qpn ++ showGRs gr) (go v l ms)
67+
go v l (Next (Goal (P qpn) gr) : ms) = (atLevel (add (P qpn) v) l $ showPackageGoal qpn gr) (go v l ms)
5868
go v l (Next _ : ms) = go v l ms -- ignore flag goals in the log
5969
go v l (Success : ms) = (atLevel v l $ "done") (go v l ms)
60-
go v l (Failure c fr : ms) = (atLevel v l $ "fail" ++ showFR c fr) (go v l ms)
70+
go v l (Failure c fr : ms) = (atLevel v l $ showFailure c fr) (go v l ms)
71+
72+
showPackageGoal :: QPN -> QGoalReasonChain -> String
73+
showPackageGoal qpn gr = "next goal: " ++ showQPN qpn ++ showGRs gr
74+
75+
showFailure :: ConflictSet QPN -> FailReason -> String
76+
showFailure c fr = "fail" ++ showFR c fr
6177

6278
add :: Var QPN -> [Var QPN] -> [Var QPN]
6379
add v vs = simplifyVar v : vs
@@ -68,6 +84,7 @@ showMessages p sl = go [] 0
6884
goPReject v l qpn is c fr ms = (atLevel (P qpn : v) l $ "rejecting: " ++ L.intercalate ", " (map (showQPNPOpt qpn) (reverse is)) ++ showFR c fr) (go v l ms)
6985

7086
-- write a message, but only if it's relevant; we can also enable or disable the display of the current level
87+
atLevel :: [Var QPN] -> Int -> String -> [String] -> [String]
7188
atLevel v l x xs
7289
| sl && p v = let s = show l
7390
in ("[" ++ replicate (3 - length s) '_' ++ s ++ "] " ++ x) : xs

0 commit comments

Comments
 (0)