packdeps-0.4.0.3: tools/packdeps-cli.hs
import Distribution.PackDeps
import Control.Monad (forM_, foldM)
import System.Environment (getArgs, getProgName)
import System.Exit (exitFailure, exitSuccess)
import Distribution.Text (display)
import Distribution.Package (PackageName (PackageName))
main :: IO ()
main = do
args <- getArgs
case args of
[] -> usageExit
["help"] -> usageExit
_ -> do
isGood <- run args
if isGood then exitSuccess else exitFailure
run :: [String] -> IO Bool
run args = do
newest <- loadNewest
foldM (go newest) True args
where
go newest wasAllGood fp = do
mdi <- loadPackage fp
di <-
case mdi of
Just di -> return di
Nothing -> error $ "Could not parse cabal file: " ++ fp
allGood <- case checkDeps newest di of
(pn, v, AllNewest) -> do
putStrLn $ concat
[ unPackageName pn
, "-"
, display v
, ": Can use newest versions of all dependencies"
]
return True
(pn, v, WontAccept p _) -> do
putStrLn $ concat
[ unPackageName pn
, "-"
, display v
, ": Cannot accept the following packages"
]
forM_ p $ \(x, y) -> putStrLn $ x ++ " " ++ y
return False
putStrLn ""
return $ wasAllGood && allGood
unPackageName :: PackageName -> String
unPackageName (PackageName n) = n
usageExit :: IO a
usageExit = do
pname <- getProgName
putStrLn $ "\n"
++ "Usage: " ++ pname ++ " pkgname.cabal\n\n"
++ "Check the given cabal file's dependency list to make sure that it does not exclude\n"
++ "the newest package available. Its probably worth running the 'cabal update' command\n"
++ "immediately before running this program.\n"
exitSuccess