cabal-bounds 1.6.0 → 2.0.0
raw patch · 3 files changed
+42/−37 lines, 3 filesdep −eitherdep ~cabal-lensesPVP ok
version bump matches the API change (PVP)
Dependencies removed: either
Dependency ranges changed: cabal-lenses
API changes (from Hackage documentation)
Files
- CHANGELOG +4/−0
- cabal-bounds.cabal +2/−3
- lib/CabalBounds/Main.hs +36/−34
CHANGELOG view
@@ -1,3 +1,7 @@+2.0.0+-----+* Migrate from EitherT to ExceptT+ 1.6.0 ----- * Support Cabal 2.2
cabal-bounds.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.9.2 name: cabal-bounds-version: 1.6.0+version: 2.0.0 license: BSD3 license-file: LICENSE maintainer: daniel.trstenjak@gmail.com@@ -103,8 +103,7 @@ strict >=0.3.2 && <0.4, unordered-containers >=0.2.3.3 && <0.3, transformers >=0.3.0.0 && <0.6,- either >=4.1.1 && <4.6,- cabal-lenses >=0.7.0 && <0.8,+ cabal-lenses >=0.8.0 && <0.9, Cabal >=2.2.0.0 && <2.3, filepath >=1.3 && <1.5, directory >=1.2 && <1.4,
lib/CabalBounds/Main.hs view
@@ -5,7 +5,7 @@ ) where import Distribution.PackageDescription (GenericPackageDescription)-import Distribution.PackageDescription.Parsec (parseGenericPackageDescription, runParseResult, ParseResult(..))+import Distribution.PackageDescription.Parsec (parseGenericPackageDescription, runParseResult) import Distribution.Parsec.Common (PWarning) import qualified Distribution.PackageDescription.PrettyPrint as PP import Distribution.Simple.Configure (tryGetConfigStateFile)@@ -28,7 +28,7 @@ import qualified System.IO.Strict as SIO import System.FilePath ((</>)) import System.Directory (getCurrentDirectory)-import Control.Monad.Trans.Either (EitherT, runEitherT, bimapEitherT, hoistEither, left, right)+import Control.Monad.Trans.Except (ExceptT, throwE, runExceptT) import Control.Monad.IO.Class import Control.Lens import qualified Data.HashMap.Strict as HM@@ -68,7 +68,7 @@ cabalBounds :: A.Args -> IO (Maybe Error) cabalBounds args@A.Drop {} =- leftToJust <$> runEitherT (do+ leftToJust <$> runExceptT (do cabalFile <- findCabalFile $ A.cabalFile args pkgDescrp <- packageDescription cabalFile let pkgDescrp' = DR.drop (B.boundOfDrop args) (S.sections args pkgDescrp) (DP.dependencies args) pkgDescrp@@ -76,7 +76,7 @@ liftIO $ writeFile outputFile (showGenericPackageDescription pkgDescrp')) cabalBounds args@A.Update {} =- leftToJust <$> runEitherT (do+ leftToJust <$> runExceptT (do cabalFile <- findCabalFile $ A.cabalFile args pkgDescrp <- packageDescription cabalFile let haskelPlatform = A.haskellPlatform args@@ -89,10 +89,10 @@ liftIO $ writeFile outputFile (showGenericPackageDescription pkgDescrp')) cabalBounds args@A.Dump {} =- leftToJust <$> runEitherT (do+ leftToJust <$> runExceptT (do cabalFiles <- if null $ A.cabalFiles args then (: []) <$> findCabalFile Nothing- else right $ A.cabalFiles args+ else return $ A.cabalFiles args pkgDescrps <- packageDescriptions cabalFiles let libs = sortLibraries $ DU.dump (DP.dependencies args) pkgDescrps@@ -101,7 +101,7 @@ Nothing -> liftIO $ putStrLn (prettyPrint libs)) cabalBounds args@A.Libs {} =- leftToJust <$> runEitherT (do+ leftToJust <$> runExceptT (do cabalFile <- findCabalFile $ A.cabalFile args let haskelPlatform = A.haskellPlatform args libFile = A.fromFile args@@ -115,7 +115,7 @@ cabalBounds args@A.Format {} =- leftToJust <$> runEitherT (do+ leftToJust <$> runExceptT (do cabalFile <- findCabalFile $ A.cabalFile args pkgDescrp <- packageDescription cabalFile let outputFile = fromMaybe cabalFile (A.output args)@@ -132,22 +132,22 @@ "[ " ++ show l ++ "\n" ++ foldl' (\str l -> str ++ ", " ++ show l ++ "\n") "" ls ++ "]\n"; -findCabalFile :: Maybe CabalFile -> EitherT Error IO CabalFile+findCabalFile :: Maybe CabalFile -> ExceptT Error IO CabalFile findCabalFile Nothing = do curDir <- liftIO getCurrentDirectory CL.findCabalFile curDir -findCabalFile (Just file) = right file+findCabalFile (Just file) = return file -packageDescription :: FilePath -> EitherT Error IO GenericPackageDescription+packageDescription :: FilePath -> ExceptT Error IO GenericPackageDescription packageDescription file = do contents <- liftIO $ BS.readFile file let (warnings, result) = runParseResult $ parseGenericPackageDescription contents liftIO $ showWarnings warnings case result of- Left (_, errors) -> left $ show errors- Right pkgDescrp -> right pkgDescrp+ Left (_, errors) -> throwE $ show errors+ Right pkgDescrp -> return pkgDescrp where showWarnings :: [PWarning] -> IO ()@@ -155,12 +155,12 @@ showWarnings ws = putStrLn $ "cabal-bounds: " ++ (L.intercalate ", " $ map show ws) -packageDescriptions :: [FilePath] -> EitherT Error IO [GenericPackageDescription]-packageDescriptions [] = left "Missing cabal file"+packageDescriptions :: [FilePath] -> ExceptT Error IO [GenericPackageDescription]+packageDescriptions [] = throwE "Missing cabal file" packageDescriptions files = mapM packageDescription files -libraries :: HP.HPVersion -> LibraryFile -> Maybe SetupConfigFile -> Maybe PlanFile -> CabalFile -> EitherT Error IO LibraryMap+libraries :: HP.HPVersion -> LibraryFile -> Maybe SetupConfigFile -> Maybe PlanFile -> CabalFile -> ExceptT Error IO LibraryMap libraries "" "" (Just confFile) _ _ = do librariesFromSetupConfig confFile @@ -175,43 +175,45 @@ newDistDir <- liftIO $ CL.findNewDistDir cabalFile case newDistDir of Just newDistDir -> librariesFromPlanFile $ newDistDir </> "cache" </> "plan.json"- Nothing -> left "Couldn't find 'dist' nor 'dist-newstyle' directory! Have you already build the cabal project?"+ Nothing -> throwE "Couldn't find 'dist' nor 'dist-newstyle' directory! Have you already build the cabal project?" libraries hpVersion libFile _ _ _ = do hpLibs <- haskellPlatformLibraries hpVersion libsFromFile <- librariesFromFile libFile- right $ HM.union hpLibs libsFromFile+ return $ HM.union hpLibs libsFromFile -librariesFromFile :: LibraryFile -> EitherT Error IO LibraryMap-librariesFromFile "" = right HM.empty+librariesFromFile :: LibraryFile -> ExceptT Error IO LibraryMap+librariesFromFile "" = return HM.empty librariesFromFile libFile = do contents <- liftIO $ SIO.readFile libFile libsFrom contents where libsFrom contents | [(libs, _)] <- reads contents :: [([(String, [Int])], String)]- = right $ HM.fromList (map (\(pkgName, versBranch) -> (pkgName, V.mkVersion versBranch)) libs)+ = return $ HM.fromList (map (\(pkgName, versBranch) -> (pkgName, V.mkVersion versBranch)) libs) | otherwise- = left "Invalid format of library file given to '--fromfile'. Expected file with content of type '[(String, [Int])]'."+ = throwE "Invalid format of library file given to '--fromfile'. Expected file with content of type '[(String, [Int])]'." -haskellPlatformLibraries :: HP.HPVersion -> EitherT Error IO LibraryMap+haskellPlatformLibraries :: HP.HPVersion -> ExceptT Error IO LibraryMap haskellPlatformLibraries hpVersion = case hpVersion of- "" -> right HM.empty- "current" -> right . HM.fromList $ HP.currentLibraries- "previous" -> right . HM.fromList $ HP.previousLibraries- version | Just libs <- HP.librariesOf version -> right . HM.fromList $ libs- | otherwise -> left $ "Invalid haskell platform version '" ++ version ++ "'"+ "" -> return HM.empty+ "current" -> return . HM.fromList $ HP.currentLibraries+ "previous" -> return . HM.fromList $ HP.previousLibraries+ version | Just libs <- HP.librariesOf version -> return . HM.fromList $ libs+ | otherwise -> throwE $ "Invalid haskell platform version '" ++ version ++ "'" -librariesFromSetupConfig :: SetupConfigFile -> EitherT Error IO LibraryMap-librariesFromSetupConfig "" = right HM.empty+librariesFromSetupConfig :: SetupConfigFile -> ExceptT Error IO LibraryMap+librariesFromSetupConfig "" = return HM.empty librariesFromSetupConfig confFile = do binfo <- liftIO $ tryGetConfigStateFile confFile- bimapEitherT show buildInfoLibs (hoistEither binfo)+ case binfo of+ Left e -> throwE $ show e+ Right bi -> return $ buildInfoLibs bi where buildInfoLibs :: LocalBuildInfo -> LibraryMap buildInfoLibs = HM.fromList@@ -223,7 +225,7 @@ newestVersion = maximum . map (P.pkgVersion . PI.sourcePackageId) -librariesFromPlanFile :: PlanFile -> EitherT Error IO LibraryMap+librariesFromPlanFile :: PlanFile -> ExceptT Error IO LibraryMap librariesFromPlanFile planFile = do contents <- liftIO $ LBS.readFile planFile let json = Aeson.decode contents :: Maybe Aeson.Value@@ -232,9 +234,9 @@ -- get all ids: ["bytestring-0.10.6.0-2362d1f36f12553920ce3710ae4a4ecb432374f4e5feb33a61b7414b43605a0df", ...] let ids = json ^.. key "install-plan" . _Array . traversed . key "id" . _String let libs = catMaybes $ map parseLibrary ids- right . HM.fromList $ libs+ return . HM.fromList $ libs - Nothing -> left $ "Couldn't parse json file '" ++ planFile ++ "'"+ Nothing -> throwE $ "Couldn't parse json file '" ++ planFile ++ "'" where parseLibrary :: Text -> Maybe (LibName, V.Version) parseLibrary text =