Skip to content

Commit 38b8806

Browse files
andreasabelmergify[bot]
authored andcommitted
Fix #6290: gen-bounds: do not report empty set of generated bounds
1 parent 8890426 commit 38b8806

File tree

7 files changed

+41
-18
lines changed

7 files changed

+41
-18
lines changed

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

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import Prelude ()
1919
import Distribution.Client.Compat.Prelude
2020

2121
import Distribution.Client.Utils
22-
( incVersion )
22+
( hasElem, incVersion )
2323
import Distribution.Client.Freeze
2424
( getFreezePkgs )
2525
import Distribution.Client.Setup
@@ -106,33 +106,29 @@ genBounds verbosity packageDBs repoCtxt comp platform progdb globalFlags freezeF
106106
case epd of
107107
Left _ -> putStrLn "finalizePD failed"
108108
Right (pd,_) -> do
109-
let needBounds = filter (not . hasUpperBound . depVersion) $
109+
let needBounds = map depName $ filter (not . hasUpperBound . depVersion) $
110110
enabledBuildDepends pd defaultComponentRequestedSpec
111111

112-
if (null needBounds)
113-
then putStrLn
114-
"Congratulations, all your dependencies have upper bounds!"
115-
else go needBounds
116-
where
117-
go needBounds = do
118112
pkgs <- getFreezePkgs
119113
verbosity packageDBs repoCtxt comp platform progdb
120114
globalFlags freezeFlags
121115

122-
putStrLn boundsNeededMsg
123-
124-
let isNeeded pkg = unPackageName (packageName pkg)
125-
`elem` map depName needBounds
116+
let isNeeded = hasElem needBounds . unPackageName . packageName
126117
let thePkgs = filter isNeeded pkgs
127118

128119
let padTo = maximum $ map (length . unPackageName . packageName) pkgs
129-
traverse_ (putStrLn . (++",") . showBounds padTo) thePkgs
130120

131-
depName :: Dependency -> String
132-
depName (Dependency pn _ _) = unPackageName pn
121+
if null thePkgs then putStrLn
122+
"Congratulations, all your dependencies have upper bounds!"
123+
else do
124+
putStrLn boundsNeededMsg
125+
traverse_ (putStrLn . (++",") . showBounds padTo) thePkgs
126+
127+
depName :: Dependency -> String
128+
depName (Dependency pn _ _) = unPackageName pn
133129

134-
depVersion :: Dependency -> VersionRange
135-
depVersion (Dependency _ vr _) = vr
130+
depVersion :: Dependency -> VersionRange
131+
depVersion (Dependency _ vr _) = vr
136132

137133
-- | The message printed when some dependencies are found to be lacking proper
138134
-- PVP-mandated bounds.

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module Distribution.Client.Utils
2828
, listFilesRecursive
2929
, listFilesInside
3030
, safeRead
31+
, hasElem
3132
) where
3233

3334
import Prelude ()
@@ -73,7 +74,7 @@ import Data.Time.Calendar (toGregorian)
7374
import qualified System.Directory as Dir
7475
import qualified System.IO.Error as IOError
7576
#endif
76-
77+
import qualified Data.Set as Set
7778

7879
-- | Generic merging utility. For sorted input lists this is a full outer join.
7980
--
@@ -478,3 +479,9 @@ safeRead :: Read a => String -> Maybe a
478479
safeRead s
479480
| [(x, "")] <- reads s = Just x
480481
| otherwise = Nothing
482+
483+
484+
-- | @hasElem xs x = elem x xs@ except that @xs@ is turned into a 'Set' first.
485+
-- Use underapplied to speed up subsequent lookups, e.g. @filter (hasElem xs) ys@.
486+
hasElem :: Ord a => [a] -> a -> Bool
487+
hasElem xs = (`Set.member` Set.fromList xs)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module Main where
2+
3+
main = putStrLn "Issue 6290."
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# cabal gen-bounds
2+
Resolving dependencies...
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Test.Cabal.Prelude
2+
3+
main = cabalTest $ cabal "gen-bounds" []
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cabal-version: 2.4
2+
name: pkg
3+
version: 0.0.0.0
4+
5+
library lib
6+
build-depends:
7+
base >= 4 && < 5
8+
9+
executable exec
10+
main-is: Main.hs
11+
build-depends: lib

cabal-testsuite/src/Test/Cabal/Prelude.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ cabalGArgs global_args cmd args input = do
287287
, "man"
288288
, "v1-freeze"
289289
, "check"
290+
, "gen-bounds"
290291
, "get", "unpack"
291292
, "info"
292293
, "init"

0 commit comments

Comments
 (0)