diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/debian/changelog cabal-install-head-3.3+git20200529.2.36ab7a0/debian/changelog --- cabal-install-head-3.3+git20200515.2.f6f78d1/debian/changelog 2020-05-17 22:38:59.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/debian/changelog 2020-05-29 20:34:06.000000000 +0000 @@ -1,5 +1,5 @@ -cabal-install-head (3.3+git20200515.2.f6f78d1-6~14.04) trusty; urgency=medium +cabal-install-head (3.3+git20200529.2.36ab7a0-6~14.04) trusty; urgency=medium * Initial release - -- Herbert Valerio Riedel Mon, 18 May 2020 00:38:59 +0200 + -- Herbert Valerio Riedel Fri, 29 May 2020 22:34:06 +0200 diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Cabal.cabal cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Cabal.cabal --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Cabal.cabal 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Cabal.cabal 2020-05-29 20:33:21.000000000 +0000 @@ -296,7 +296,7 @@ filepath >= 1.3.0.1 && < 1.5, pretty >= 1.1.1 && < 1.2, process >= 1.1.0.2 && < 1.7, - time >= 1.4.0.1 && < 1.10 + time >= 1.4.0.1 && < 1.11 if flag(bundled-binary-generic) build-depends: binary >= 0.5.1.1 && < 0.7 @@ -679,14 +679,14 @@ pretty, rere >=0.1 && <0.2, tagged, - tasty >= 1.2.3 && < 1.3, + tasty >= 1.2.3 && < 1.4, tasty-hunit, tasty-quickcheck, temporary, text, transformers, Diff >=0.4 && <0.5, - QuickCheck >= 2.13.2 && < 2.14, + QuickCheck >= 2.14 && < 2.15, Cabal ghc-options: -Wall default-language: Haskell2010 @@ -707,7 +707,7 @@ bytestring, directory, filepath, - tasty >= 1.2.3 && < 1.3, + tasty >= 1.2.3 && < 1.4, tasty-hunit, tasty-quickcheck, tasty-golden >=2.3.1.1 && <2.4, @@ -738,7 +738,7 @@ bytestring, directory, filepath, - tasty >= 1.2.3 && < 1.3, + tasty >= 1.2.3 && < 1.4, tasty-golden >=2.3.1.1 && <2.4, Diff >=0.4 && <0.5, Cabal @@ -814,7 +814,7 @@ bytestring build-depends: - tasty >= 1.2.3 && < 1.3, + tasty >= 1.2.3 && < 1.4, tasty-hunit, tasty-quickcheck, QuickCheck diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs 2020-05-29 20:33:21.000000000 +0000 @@ -20,7 +20,6 @@ import Distribution.Compiler (CompilerFlavor, CompilerId, PerCompilerFlavor) import Distribution.InstalledPackageInfo (AbiDependency, ExposedModule, InstalledPackageInfo) import Distribution.ModuleName (ModuleName) -import Distribution.Package (PackageIdentifier, PackageName) import Distribution.PackageDescription import Distribution.Simple.Compiler (DebugInfoLevel, OptimisationLevel, ProfDetailLevel) import Distribution.Simple.Flag (Flag) @@ -30,24 +29,15 @@ import Distribution.System import Distribution.Types.AbiHash (AbiHash) import Distribution.Types.ComponentId (ComponentId) -import Distribution.Types.CondTree -import Distribution.Types.Dependency (Dependency (..), mainLibSet) -import Distribution.Types.ExecutableScope -import Distribution.Types.ExeDependency -import Distribution.Types.ForeignLib -import Distribution.Types.ForeignLibOption -import Distribution.Types.ForeignLibType import Distribution.Types.IncludeRenaming (IncludeRenaming) -import Distribution.Types.LegacyExeDependency -import Distribution.Types.LibraryVisibility (LibraryVisibility) import Distribution.Types.Mixin +import Distribution.Types.ModuleReexport +import Distribution.Types.ModuleRenaming import Distribution.Types.PackageVersionConstraint -import Distribution.Types.PkgconfigDependency (PkgconfigDependency) import Distribution.Types.PkgconfigName (PkgconfigName) import Distribution.Types.PkgconfigVersion (PkgconfigVersion) import Distribution.Types.PkgconfigVersionRange (PkgconfigVersionRange) import Distribution.Types.UnitId (DefUnitId, UnitId) -import Distribution.Types.UnqualComponentName import Distribution.Utils.NubList (NubList) import Distribution.Utils.ShortText (ShortText, fromShortText) import Distribution.Verbosity diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/ComponentsGraph.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/ComponentsGraph.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/ComponentsGraph.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/ComponentsGraph.hs 2020-05-29 20:33:20.000000000 +0000 @@ -16,7 +16,6 @@ import Distribution.Simple.BuildToolDepends import Distribution.Simple.LocalBuildInfo import Distribution.Types.ComponentRequestedSpec -import Distribution.Types.UnqualComponentName import Distribution.Compat.Graph (Graph, Node(..)) import qualified Distribution.Compat.Graph as Graph import Distribution.Utils.Generic diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/Id.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/Id.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/Id.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/Id.hs 2020-05-29 20:33:21.000000000 +0000 @@ -17,7 +17,6 @@ import qualified Distribution.Simple.InstallDirs as InstallDirs import Distribution.Simple.LocalBuildInfo import Distribution.Types.ComponentId -import Distribution.Types.PackageId import Distribution.Types.UnitId import Distribution.Types.MungedPackageName import Distribution.Utils.Base62 diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/LinkedComponent.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/LinkedComponent.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/LinkedComponent.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/LinkedComponent.hs 2020-05-29 20:33:20.000000000 +0000 @@ -29,6 +29,7 @@ import Distribution.Types.AnnotatedId import Distribution.Types.ComponentName +import Distribution.Types.ModuleReexport import Distribution.Types.ModuleRenaming import Distribution.Types.IncludeRenaming import Distribution.Types.ComponentInclude @@ -43,11 +44,8 @@ import qualified Data.Set as Set import qualified Data.Map as Map -import Data.Traversable - ( mapM ) import Distribution.Pretty (pretty) -import Text.PrettyPrint -import Data.Either +import Text.PrettyPrint (Doc, hang, text, vcat, ($+$), hsep, quotes) -- | A linked component is a component that has been mix-in linked, at -- which point we have determined how all the dependencies of the @@ -187,19 +185,19 @@ m_u <- convertModule (OpenModule this_uid m) return (Map.singleton m [WithSource (from m) m_u], Map.empty) -- Handle 'exposed-modules' - exposed_mod_shapes_u <- mapM (convertMod FromExposedModules) src_provs + exposed_mod_shapes_u <- traverse (convertMod FromExposedModules) src_provs -- Handle 'other-modules' - other_mod_shapes_u <- mapM (convertMod FromOtherModules) src_hidden + other_mod_shapes_u <- traverse (convertMod FromOtherModules) src_hidden -- Handle 'signatures' let convertReq :: ModuleName -> UnifyM s (ModuleScopeU s) convertReq req = do req_u <- convertModule (OpenModuleVar req) return (Map.empty, Map.singleton req [WithSource (FromSignatures req) req_u]) - req_shapes_u <- mapM convertReq src_reqs + req_shapes_u <- traverse convertReq src_reqs -- Handle 'mixins' - (incl_shapes_u, all_includes_u) <- fmap unzip (mapM convertInclude unlinked_includes) + (incl_shapes_u, all_includes_u) <- fmap unzip (traverse convertInclude unlinked_includes) failIfErrs -- Prevent error cascade -- Mix-in link everything! mixLink is the real workhorse. @@ -208,7 +206,7 @@ ++ req_shapes_u ++ incl_shapes_u - -- src_reqs_u <- mapM convertReq src_reqs + -- src_reqs_u <- traverse convertReq src_reqs -- Read out all the final results by converting back -- into a pure representation. let convertIncludeU (ComponentInclude dep_aid rns i) = do @@ -220,8 +218,8 @@ }) shape <- convertModuleScopeU shape_u let (includes_u, sig_includes_u) = partitionEithers all_includes_u - incls <- mapM convertIncludeU includes_u - sig_incls <- mapM convertIncludeU sig_includes_u + incls <- traverse convertIncludeU includes_u + sig_incls <- traverse convertIncludeU sig_includes_u return (shape, incls, sig_incls) let isNotLib (CLib _) = False diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/ReadyComponent.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/ReadyComponent.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/ReadyComponent.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/ReadyComponent.hs 2020-05-29 20:33:21.000000000 +0000 @@ -39,9 +39,6 @@ import Distribution.Package import Distribution.Simple.Utils -import qualified Control.Applicative as A -import qualified Data.Traversable as T - import Control.Monad import Text.PrettyPrint import qualified Data.Map as Map @@ -198,14 +195,14 @@ fmap f (InstM m) = InstM $ \s -> let (x, s') = m s in (f x, s') -instance A.Applicative InstM where +instance Applicative InstM where pure a = InstM $ \s -> (a, s) InstM f <*> InstM x = InstM $ \s -> let (f', s') = f s (x', s'') = x s' in (f' x', s'') instance Monad InstM where - return = A.pure + return = pure InstM m >>= f = InstM $ \s -> let (x, s') = m s in runInstM (f x) s' @@ -259,20 +256,20 @@ -> InstM (Maybe ReadyComponent) instantiateComponent uid cid insts | Just lc <- Map.lookup cid cmap = do - provides <- T.mapM (substModule insts) (modShapeProvides (lc_shape lc)) + provides <- traverse (substModule insts) (modShapeProvides (lc_shape lc)) -- NB: lc_sig_includes is omitted here, because we don't -- need them to build includes <- forM (lc_includes lc) $ \ci -> do uid' <- substUnitId insts (ci_id ci) return ci { ci_ann_id = fmap (const uid') (ci_ann_id ci) } - exe_deps <- mapM (substExeDep insts) (lc_exe_deps lc) + exe_deps <- traverse (substExeDep insts) (lc_exe_deps lc) s <- InstM $ \s -> (s, s) let getDep (Module dep_def_uid _) | let dep_uid = unDefUnitId dep_def_uid -- Lose DefUnitId invariant for rc_depends = [(dep_uid, fromMaybe err_pid $ - Map.lookup dep_uid pid_map A.<|> + Map.lookup dep_uid pid_map <|> fmap rc_munged_id (join (Map.lookup dep_uid s)))] where err_pid = MungedPackageId @@ -313,7 +310,7 @@ substSubst :: Map ModuleName Module -> Map ModuleName OpenModule -> InstM (Map ModuleName Module) - substSubst subst insts = T.mapM (substModule subst) insts + substSubst subst insts = traverse (substModule subst) insts substModule :: Map ModuleName Module -> OpenModule -> InstM Module substModule subst (OpenModuleVar mod_name) @@ -346,7 +343,7 @@ then do uid' <- substUnitId Map.empty (ci_id ci) return $ ci { ci_ann_id = fmap (const (DefiniteUnitId uid')) (ci_ann_id ci) } else return ci - exe_deps <- mapM (substExeDep Map.empty) (lc_exe_deps lc) + exe_deps <- traverse (substExeDep Map.empty) (lc_exe_deps lc) let indefc = IndefiniteComponent { indefc_requires = map fst (lc_insts lc), indefc_provides = modShapeProvides (lc_shape lc), diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/UnifyM.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/UnifyM.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Backpack/UnifyM.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Backpack/UnifyM.hs 2020-05-29 20:33:21.000000000 +0000 @@ -60,7 +60,7 @@ import Distribution.Types.IncludeRenaming import Distribution.Types.ComponentInclude import Distribution.Types.AnnotatedId -import Distribution.Types.ComponentName +import Distribution.Types.ModuleRenaming import Distribution.Verbosity import Data.STRef @@ -70,7 +70,6 @@ import qualified Data.Set as Set import Data.IntMap (IntMap) import qualified Data.IntMap as IntMap -import qualified Data.Traversable as T import Text.PrettyPrint -- TODO: more detailed trace output on high verbosity would probably @@ -321,7 +320,7 @@ convertUnitId' stk (IndefFullUnitId cid insts) = do fs <- fmap unify_uniq getUnifEnv x <- liftST $ UnionFind.fresh (error "convertUnitId") -- tie the knot later - insts_u <- T.forM insts $ convertModule' (extendMuEnv stk x) + insts_u <- for insts $ convertModule' (extendMuEnv stk x) u <- readUnifRef fs writeUnifRef fs (u+1) y <- liftST $ UnionFind.fresh (UnitIdU u cid insts_u) @@ -359,11 +358,11 @@ -- | Conversion of 'ModuleSubst' to 'ModuleSubstU' convertModuleSubst :: Map ModuleName OpenModule -> UnifyM s (Map ModuleName (ModuleU s)) -convertModuleSubst = T.mapM convertModule +convertModuleSubst = traverse convertModule -- | Conversion of 'ModuleSubstU' to 'ModuleSubst' convertModuleSubstU :: ModuleSubstU s -> UnifyM s OpenModuleSubst -convertModuleSubstU = T.mapM convertModuleU +convertModuleSubstU = traverse convertModuleU ----------------------------------------------------------------------- -- Conversion from the unifiable data types @@ -400,7 +399,7 @@ failWith (text "Unsupported mutually recursive unit identifier") -- return (UnitIdVar i) Nothing -> do - insts <- T.forM insts_u $ convertModuleU' (extendMooEnv stk u) + insts <- for insts_u $ convertModuleU' (extendMooEnv stk u) return (IndefFullUnitId cid insts) convertModuleU' :: MooEnv -> ModuleU s -> UnifyM s OpenModule @@ -615,11 +614,11 @@ -- | Convert a 'ModuleProvides' to a 'ModuleProvidesU' convertModuleProvides :: ModuleProvides -> UnifyM s (ModuleProvidesU s) -convertModuleProvides = T.mapM (mapM (T.mapM convertModule)) +convertModuleProvides = traverse (traverse (traverse convertModule)) -- | Convert a 'ModuleProvidesU' to a 'ModuleProvides' convertModuleProvidesU :: ModuleProvidesU s -> UnifyM s ModuleProvides -convertModuleProvidesU = T.mapM (mapM (T.mapM convertModuleU)) +convertModuleProvidesU = traverse (traverse (traverse convertModuleU)) convertModuleRequires :: ModuleRequires -> UnifyM s (ModuleRequiresU s) convertModuleRequires = convertModuleProvides diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/CopyFile.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/CopyFile.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/CopyFile.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/CopyFile.hs 2020-05-29 20:33:21.000000000 +0000 @@ -14,13 +14,11 @@ import Prelude () import Distribution.Compat.Prelude -import Distribution.Compat.Exception - #ifndef mingw32_HOST_OS import Distribution.Compat.Internal.TempFile import Control.Exception - ( bracketOnError, throwIO ) + ( bracketOnError ) import qualified Data.ByteString.Lazy as BSL import System.IO.Error ( ioeSetLocation ) @@ -43,8 +41,6 @@ #else /* else mingw32_HOST_OS */ -import Control.Exception - ( throwIO ) import qualified Data.ByteString.Lazy as BSL import System.IO.Error ( ioeSetLocation ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Exception.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Exception.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Exception.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Exception.hs 2020-05-29 20:33:20.000000000 +0000 @@ -6,22 +6,32 @@ displayException, ) where +#ifdef MIN_VERSION_base +#define MINVER_base_48 MIN_VERSION_base(4,8,0) +#else +#define MINVER_base_48 (__GLASGOW_HASKELL__ >= 710) +#endif + import System.Exit import qualified Control.Exception as Exception -#if __GLASGOW_HASKELL__ >= 710 + +#if MINVER_base_48 import Control.Exception (displayException) #endif +-- | Try 'IOException'. tryIO :: IO a -> IO (Either Exception.IOException a) tryIO = Exception.try +-- | Catch 'IOException'. catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a catchIO = Exception.catch +-- | Catch 'ExitCode' catchExit :: IO a -> (ExitCode -> IO a) -> IO a catchExit = Exception.catch -#if __GLASGOW_HASKELL__ < 710 +#if !MINVER_base_48 displayException :: Exception.Exception e => e -> String displayException = show #endif diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Graph.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Graph.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Graph.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Graph.hs 2020-05-29 20:33:20.000000000 +0000 @@ -88,7 +88,6 @@ import Prelude () import Data.Array ((!)) -import Data.Either (partitionEithers) import Data.Graph (SCC (..)) import Distribution.Utils.Structured (Structure (..), Structured (..)) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Lens.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Lens.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Lens.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Lens.hs 2020-05-29 20:33:21.000000000 +0000 @@ -50,7 +50,6 @@ import Prelude() import Distribution.Compat.Prelude -import Control.Applicative (Const (..)) import Control.Monad.State.Class (MonadState (..), gets, modify) import qualified Distribution.Compat.DList as DList diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Prelude.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Prelude.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/Prelude.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/Prelude.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,8 +1,8 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE TypeOperators #-} -{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE Trustworthy #-} +{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE Trustworthy #-} +{-# LANGUAGE TypeOperators #-} #ifdef MIN_VERSION_base #define MINVER_base_411 MIN_VERSION_base(4,11,0) @@ -50,8 +50,12 @@ NonEmptySet, Identity (..), Proxy (..), + Const (..), Void, + -- * Data.Either + partitionEithers, + -- * Data.Maybe catMaybes, mapMaybe, fromMaybe, @@ -64,6 +68,7 @@ intercalate, intersperse, sort, sortBy, nub, nubBy, + partition, -- * Data.List.NonEmpty NonEmpty((:|)), foldl1, foldr1, @@ -81,6 +86,12 @@ Traversable, traverse, sequenceA, for, + -- * Data.Function + on, + + -- * Data.Ord + comparing, + -- * Control.Arrow first, @@ -89,6 +100,18 @@ unless, when, ap, void, foldM, filterM, + join, guard, + + -- * Control.Exception + catch, throwIO, evaluate, + Exception (..), IOException, SomeException (..), +#if !MINVER_base_48 + displayException, +#endif + tryIO, catchIO, catchExit, + + -- * Control.DeepSeq + deepseq, force, -- * Data.Char isSpace, isDigit, isUpper, isAlpha, isAlphaNum, @@ -104,11 +127,19 @@ Int8, Int16, Int32, Int64, -- * Text.PrettyPrint - (<<>>), + (<<>>), (Disp.<+>), + + -- * System.Exit + ExitCode (..), + exitWith, exitSuccess, exitFailure, -- * Text.Read readMaybe, + + -- * Debug.Trace (as deprecated functions) + traceShow, traceShowId, ) where + -- We also could hide few partial function import Prelude as BasePrelude hiding ( mapM, mapM_, sequence, null, length, foldr, any, all, head, tail, last, init @@ -128,51 +159,57 @@ #endif ) +-- AMP #if !MINVER_base_48 import Control.Applicative (Applicative (..), (<$), (<$>)) -import Distribution.Compat.Semigroup (Monoid (..)) import Data.Foldable (toList) +import Distribution.Compat.Semigroup (Monoid (..)) #else -import Data.Foldable (length, null, Foldable(toList)) +import Data.Foldable (Foldable (toList), length, null) #endif -import Data.Foldable (Foldable (foldMap, foldr), find, foldl', for_, traverse_, any, all) -import Data.Traversable (Traversable (traverse, sequenceA), for) +import Data.Foldable (Foldable (foldMap, foldr), all, any, find, foldl', for_, traverse_) +import Data.Traversable (Traversable (sequenceA, traverse), for) + import qualified Data.Foldable +-- Extra exports import Control.Applicative (Alternative (..)) -import Control.DeepSeq (NFData (..)) +import Control.Applicative (Const (..)) +import Control.Arrow (first) +import Control.DeepSeq (NFData (..), deepseq, force) +import Control.Exception (Exception (..), IOException, SomeException (..), catch, evaluate, throwIO) +import Control.Monad (MonadPlus (..), ap, filterM, foldM, guard, join, liftM, liftM2, unless, void, when) +import Data.Char (chr, isAlpha, isAlphaNum, isDigit, isSpace, isUpper, ord, toLower, toUpper) import Data.Data (Data) -import Distribution.Compat.Typeable (Typeable, TypeRep, typeRep) -import Distribution.Compat.Binary (Binary (..)) -import Distribution.Compat.Semigroup (Semigroup (..), gmappend, gmempty) -import GHC.Generics (Generic, Rep(..), - V1, U1(U1), K1(unK1), M1(unM1), - (:*:)((:*:)), (:+:)(L1,R1)) - +import Data.Either (partitionEithers) +import Data.Function (on) import Data.Functor.Identity (Identity (..)) +import Data.Int (Int16, Int32, Int64, Int8) +import Data.List (intercalate, intersperse, isPrefixOf, isSuffixOf, nub, nubBy, partition, sort, sortBy, unfoldr) +import Data.List.NonEmpty (NonEmpty ((:|)), head, init, last, tail) import Data.Map (Map) +import Data.Maybe (catMaybes, fromMaybe, isJust, isNothing, listToMaybe, mapMaybe, maybeToList) +import Data.Ord (comparing) import Data.Proxy (Proxy (..)) import Data.Set (Set) - -import Control.Arrow (first) -import Control.Monad hiding (mapM) -import Data.Char -import Data.List (intercalate, intersperse, isPrefixOf, - isSuffixOf, nub, nubBy, sort, sortBy, - unfoldr) -import Data.List.NonEmpty (NonEmpty((:|)), head, tail, init, last) -import Data.Maybe import Data.String (IsString (..)) -import Data.Int -import Data.Word import Data.Void (Void, absurd, vacuous) +import Data.Word (Word, Word16, Word32, Word64, Word8) +import Distribution.Compat.Binary (Binary (..)) +import Distribution.Compat.Semigroup (Semigroup (..), gmappend, gmempty) +import Distribution.Compat.Typeable (TypeRep, Typeable, typeRep) +import GHC.Generics ((:*:) ((:*:)), (:+:) (L1, R1), Generic, K1 (unK1), M1 (unM1), Rep (..), U1 (U1), V1) +import System.Exit (ExitCode (..), exitFailure, exitSuccess, exitWith) import Text.Read (readMaybe) import qualified Text.PrettyPrint as Disp -import Distribution.Utils.Structured (Structured) +import Distribution.Compat.Exception import Distribution.Compat.NonEmptySet (NonEmptySet) +import Distribution.Utils.Structured (Structured) + +import qualified Debug.Trace -- | New name for 'Text.PrettyPrint.<>' (<<>>) :: Disp.Doc -> Disp.Doc -> Disp.Doc @@ -258,3 +295,18 @@ {-# INLINE foldl1 #-} foldl1 :: (a -> a -> a) -> NonEmpty a -> a foldl1 = Data.Foldable.foldl1 + +------------------------------------------------------------------------------- +-- Trace +------------------------------------------------------------------------------- + +-- Functions from Debug.Trace +-- but with DEPRECATED pragma, so -Werror will scream on them. + +traceShowId :: Show a => a -> a +traceShowId x = Debug.Trace.traceShow x x +{-# DEPRECATED traceShowId "Don't leave me in the code" #-} + +traceShow :: Show a => a -> b -> b +traceShow = Debug.Trace.traceShow +{-# DEPRECATED traceShow "Don't leave me in the code" #-} diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/ResponseFile.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/ResponseFile.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Compat/ResponseFile.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Compat/ResponseFile.hs 2020-05-29 20:33:20.000000000 +0000 @@ -1,68 +1,67 @@ -{-# LANGUAGE CPP, RankNTypes, FlexibleContexts #-} - --- Compatibility layer for GHC.ResponseFile --- Implementation from base 4.12.0 is used. --- http://hackage.haskell.org/package/base-4.12.0.0/src/LICENSE -module Distribution.Compat.ResponseFile (expandResponse) where - -import Prelude (mapM) -import Distribution.Compat.Prelude - -import System.Exit -import System.FilePath -import System.IO (hPutStrLn, stderr) -import System.IO.Error - -#if MIN_VERSION_base(4,12,0) -import GHC.ResponseFile (unescapeArgs) -#else - -unescapeArgs :: String -> [String] -unescapeArgs = filter (not . null) . unescape - -data Quoting = NoneQ | SngQ | DblQ - -unescape :: String -> [String] -unescape args = reverse . map reverse $ go args NoneQ False [] [] - where - -- n.b., the order of these cases matters; these are cribbed from gcc - -- case 1: end of input - go [] _q _bs a as = a:as - -- case 2: back-slash escape in progress - go (c:cs) q True a as = go cs q False (c:a) as - -- case 3: no back-slash escape in progress, but got a back-slash - go (c:cs) q False a as - | '\\' == c = go cs q True a as - -- case 4: single-quote escaping in progress - go (c:cs) SngQ False a as - | '\'' == c = go cs NoneQ False a as - | otherwise = go cs SngQ False (c:a) as - -- case 5: double-quote escaping in progress - go (c:cs) DblQ False a as - | '"' == c = go cs NoneQ False a as - | otherwise = go cs DblQ False (c:a) as - -- case 6: no escaping is in progress - go (c:cs) NoneQ False a as - | isSpace c = go cs NoneQ False [] (a:as) - | '\'' == c = go cs SngQ False a as - | '"' == c = go cs DblQ False a as - | otherwise = go cs NoneQ False (c:a) as - -#endif - -expandResponse :: [String] -> IO [String] -expandResponse = go recursionLimit "." - where - recursionLimit = 100 - - go :: Int -> FilePath -> [String] -> IO [String] - go n dir - | n >= 0 = fmap concat . mapM (expand n dir) - | otherwise = const $ hPutStrLn stderr "Error: response file recursion limit exceeded." >> exitFailure - - expand :: Int -> FilePath -> String -> IO [String] - expand n dir arg@('@':f) = readRecursively n (dir f) `catchIOError` (const $ print "?" >> return [arg]) - expand _n _dir x = return [x] - - readRecursively :: Int -> FilePath -> IO [String] - readRecursively n f = go (n - 1) (takeDirectory f) =<< unescapeArgs <$> readFile f +{-# LANGUAGE CPP, RankNTypes, FlexibleContexts #-} + +-- Compatibility layer for GHC.ResponseFile +-- Implementation from base 4.12.0 is used. +-- http://hackage.haskell.org/package/base-4.12.0.0/src/LICENSE +module Distribution.Compat.ResponseFile (expandResponse) where + +import Distribution.Compat.Prelude +import Prelude () + +import System.FilePath +import System.IO (hPutStrLn, stderr) +import System.IO.Error + +#if MIN_VERSION_base(4,12,0) +import GHC.ResponseFile (unescapeArgs) +#else + +unescapeArgs :: String -> [String] +unescapeArgs = filter (not . null) . unescape + +data Quoting = NoneQ | SngQ | DblQ + +unescape :: String -> [String] +unescape args = reverse . map reverse $ go args NoneQ False [] [] + where + -- n.b., the order of these cases matters; these are cribbed from gcc + -- case 1: end of input + go [] _q _bs a as = a:as + -- case 2: back-slash escape in progress + go (c:cs) q True a as = go cs q False (c:a) as + -- case 3: no back-slash escape in progress, but got a back-slash + go (c:cs) q False a as + | '\\' == c = go cs q True a as + -- case 4: single-quote escaping in progress + go (c:cs) SngQ False a as + | '\'' == c = go cs NoneQ False a as + | otherwise = go cs SngQ False (c:a) as + -- case 5: double-quote escaping in progress + go (c:cs) DblQ False a as + | '"' == c = go cs NoneQ False a as + | otherwise = go cs DblQ False (c:a) as + -- case 6: no escaping is in progress + go (c:cs) NoneQ False a as + | isSpace c = go cs NoneQ False [] (a:as) + | '\'' == c = go cs SngQ False a as + | '"' == c = go cs DblQ False a as + | otherwise = go cs NoneQ False (c:a) as + +#endif + +expandResponse :: [String] -> IO [String] +expandResponse = go recursionLimit "." + where + recursionLimit = 100 + + go :: Int -> FilePath -> [String] -> IO [String] + go n dir + | n >= 0 = fmap concat . traverse (expand n dir) + | otherwise = const $ hPutStrLn stderr "Error: response file recursion limit exceeded." >> exitFailure + + expand :: Int -> FilePath -> String -> IO [String] + expand n dir arg@('@':f) = readRecursively n (dir f) `catchIOError` (const $ print "?" >> return [arg]) + expand _n _dir x = return [x] + + readRecursively :: Int -> FilePath -> IO [String] + readRecursively n f = go (n - 1) (takeDirectory f) =<< unescapeArgs <$> readFile f diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Newtypes.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Newtypes.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Newtypes.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Newtypes.hs 2020-05-29 20:33:21.000000000 +0000 @@ -44,7 +44,7 @@ import Distribution.Pretty import Distribution.Version (LowerBound (..), Version, VersionRange, VersionRangeF (..), anyVersion, asVersionIntervals, cataVersionRange, mkVersion, version0, versionNumbers) -import Text.PrettyPrint (Doc, comma, fsep, punctuate, text, vcat, (<+>)) +import Text.PrettyPrint (Doc, comma, fsep, punctuate, text, vcat) import qualified Data.Set as Set import qualified Distribution.Compat.CharParsing as P diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Parsec.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Parsec.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Parsec.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/FieldGrammar/Parsec.hs 2020-05-29 20:33:21.000000000 +0000 @@ -66,7 +66,6 @@ ) where import Data.List (dropWhileEnd) -import Data.Ord (comparing) import Distribution.Compat.Newtype import Distribution.Compat.Prelude import Distribution.Simple.Utils (fromUTF8BS) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Fields/Parser.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Fields/Parser.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Fields/Parser.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Fields/Parser.hs 2020-05-29 20:33:21.000000000 +0000 @@ -27,7 +27,6 @@ #endif ) where -import Control.Monad (guard) import qualified Data.ByteString.Char8 as B8 import Data.Functor.Identity import Distribution.Compat.Prelude diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/InstalledPackageInfo.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/InstalledPackageInfo.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/InstalledPackageInfo.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/InstalledPackageInfo.hs 2020-05-29 20:33:20.000000000 +0000 @@ -52,7 +52,6 @@ import Distribution.Types.ComponentName import Distribution.Utils.Generic (toUTF8BS) -import Control.DeepSeq (deepseq) import Data.ByteString (ByteString) import qualified Data.Map as Map diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Make.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Make.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Make.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Make.hs 2020-05-29 20:33:20.000000000 +0000 @@ -67,7 +67,6 @@ import Distribution.Compat.Prelude -- local -import Distribution.Compat.Exception import Distribution.Package import Distribution.Simple.Program import Distribution.Simple.Setup @@ -80,7 +79,6 @@ import Distribution.Pretty import System.Environment (getArgs, getProgName) -import System.Exit defaultMain :: IO () defaultMain = getArgs >>= defaultMainArgs diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/Check.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/Check.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/Check.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/Check.hs 2020-05-29 20:33:20.000000000 +0000 @@ -36,7 +36,6 @@ import Distribution.Compat.Prelude import Prelude () -import Control.Monad (mapM) import Data.List (group) import Distribution.CabalSpecVersion import Distribution.Compat.Lens @@ -53,10 +52,7 @@ import Distribution.Simple.Utils hiding (findPackageDesc, notice) import Distribution.System import Distribution.Types.ComponentRequestedSpec -import Distribution.Types.CondTree -import Distribution.Types.ExeDependency -import Distribution.Types.LibraryName -import Distribution.Types.UnqualComponentName +import Distribution.Types.ModuleReexport import Distribution.Utils.Generic (isAscii) import Distribution.Verbosity import Distribution.Version @@ -1747,7 +1743,8 @@ -- The point of this extra generality is to allow doing checks in some virtual -- file system, for example a tarball in memory. -- -checkPackageContent :: Monad m => CheckPackageContentOps m +checkPackageContent :: (Monad m, Applicative m) + => CheckPackageContentOps m -> PackageDescription -> m [PackageCheck] checkPackageContent ops pkg = do @@ -1838,11 +1835,12 @@ ++ "Please use only one of: " ++ intercalate ", " l -checkLicensesExist :: Monad m => CheckPackageContentOps m +checkLicensesExist :: (Monad m, Applicative m) + => CheckPackageContentOps m -> PackageDescription -> m [PackageCheck] checkLicensesExist ops pkg = do - exists <- mapM (doesFileExist ops) (licenseFiles pkg) + exists <- traverse (doesFileExist ops) (licenseFiles pkg) return [ PackageBuildWarning $ "The '" ++ fieldname ++ "' field refers to the file " @@ -1895,11 +1893,12 @@ } | (dir, kind) <- missing ] -checkMissingVcsInfo :: Monad m => CheckPackageContentOps m +checkMissingVcsInfo :: (Monad m, Applicative m) + => CheckPackageContentOps m -> PackageDescription -> m [PackageCheck] checkMissingVcsInfo ops pkg | null (sourceRepos pkg) = do - vcsInUse <- liftM or $ mapM (doesDirectoryExist ops) repoDirnames + vcsInUse <- liftM or $ traverse (doesDirectoryExist ops) repoDirnames if vcsInUse then return [ PackageDistSuspicious message ] else return [] diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/Configuration.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/Configuration.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/Configuration.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/Configuration.hs 2020-05-29 20:33:20.000000000 +0000 @@ -33,39 +33,33 @@ transformAllBuildDepends, ) where -import Prelude () import Distribution.Compat.Prelude +import Prelude () -- lens -import qualified Distribution.Types.BuildInfo.Lens as L +import qualified Distribution.Types.BuildInfo.Lens as L import qualified Distribution.Types.GenericPackageDescription.Lens as L -import qualified Distribution.Types.PackageDescription.Lens as L -import qualified Distribution.Types.SetupBuildInfo.Lens as L +import qualified Distribution.Types.PackageDescription.Lens as L +import qualified Distribution.Types.SetupBuildInfo.Lens as L -import Distribution.PackageDescription -import Distribution.PackageDescription.Utils -import Distribution.Version -import Distribution.Compiler -import Distribution.System -import Distribution.Parsec -import Distribution.Pretty -import Distribution.Compat.CharParsing hiding (char) -import qualified Distribution.Compat.CharParsing as P -import Distribution.Simple.Utils -import Distribution.Compat.Lens -import Distribution.Types.ComponentRequestedSpec -import Distribution.Types.ForeignLib -import Distribution.Types.Component -import Distribution.Types.Dependency -import Distribution.Types.PackageName -import Distribution.Types.PackageVersionConstraint -import Distribution.Types.UnqualComponentName -import Distribution.Types.CondTree -import Distribution.Types.Condition -import Distribution.Types.DependencyMap +import Distribution.Compat.CharParsing hiding (char) +import qualified Distribution.Compat.CharParsing as P +import Distribution.Compat.Lens +import Distribution.Compiler +import Distribution.PackageDescription +import Distribution.PackageDescription.Utils +import Distribution.Parsec +import Distribution.Pretty +import Distribution.Simple.Utils +import Distribution.System +import Distribution.Types.Component +import Distribution.Types.ComponentRequestedSpec +import Distribution.Types.DependencyMap +import Distribution.Types.PackageVersionConstraint +import Distribution.Version -import qualified Data.Map.Lazy as Map -import Data.Tree ( Tree(Node) ) +import qualified Data.Map.Lazy as Map +import Data.Tree (Tree (Node)) ------------------------------------------------------------------------------ @@ -127,7 +121,7 @@ flagIdent = fmap (PackageFlag . mkFlagName . lowercase) (munch1 isIdentChar) isIdentChar c = isAlphaNum c || c == '_' || c == '-' oper s = sp >> string s >> sp - sp = spaces + sp = spaces implIdent = do i <- parsec vr <- sp >> option anyVersion parsec return $ Impl i vr diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/FieldGrammar.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/FieldGrammar.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/FieldGrammar.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/FieldGrammar.hs 2020-05-29 20:33:21.000000000 +0000 @@ -63,16 +63,8 @@ import Distribution.PackageDescription import Distribution.Parsec import Distribution.Pretty (prettyShow) -import Distribution.Types.ExecutableScope -import Distribution.Types.ExeDependency (ExeDependency) -import Distribution.Types.ForeignLib -import Distribution.Types.ForeignLibOption (ForeignLibOption) -import Distribution.Types.ForeignLibType -import Distribution.Types.LegacyExeDependency (LegacyExeDependency) -import Distribution.Types.LibraryVisibility (LibraryVisibility (..)) +import Distribution.Types.ModuleReexport import Distribution.Types.Mixin (Mixin) -import Distribution.Types.PkgconfigDependency (PkgconfigDependency) -import Distribution.Types.UnqualComponentName import Distribution.Version (Version, VersionRange) import qualified Distribution.SPDX as SPDX diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/Parsec.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/Parsec.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/Parsec.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/Parsec.hs 2020-05-29 20:33:21.000000000 +0000 @@ -35,12 +35,8 @@ import Distribution.Compat.Prelude import Prelude () -import Control.Applicative (Const (..)) -import Control.DeepSeq (deepseq) -import Control.Monad (guard) import Control.Monad.State.Strict (StateT, execStateT) import Control.Monad.Trans.Class (lift) -import Data.List (partition) import Distribution.CabalSpecVersion import Distribution.Compat.Lens import Distribution.FieldGrammar @@ -60,13 +56,6 @@ import Distribution.Parsec.Warning (PWarnType (..)) import Distribution.Pretty (prettyShow) import Distribution.Simple.Utils (fromUTF8BS, toUTF8BS) -import Distribution.Types.CondTree -import Distribution.Types.Dependency (Dependency) -import Distribution.Types.ForeignLib -import Distribution.Types.ForeignLibType (knownForeignLibTypes) -import Distribution.Types.GenericPackageDescription (emptyGenericPackageDescription) -import Distribution.Types.LibraryVisibility (LibraryVisibility (..)) -import Distribution.Types.UnqualComponentName (UnqualComponentName, mkUnqualComponentName) import Distribution.Utils.Generic (breakMaybe, unfoldrM, validateUTF8) import Distribution.Verbosity (Verbosity) import Distribution.Version (Version, mkVersion, versionNumbers) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/PrettyPrint.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/PrettyPrint.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription/PrettyPrint.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription/PrettyPrint.hs 2020-05-29 20:33:20.000000000 +0000 @@ -31,12 +31,6 @@ import Distribution.Compat.Prelude import Prelude () -import Distribution.Types.CondTree -import Distribution.Types.Dependency -import Distribution.Types.ForeignLib (ForeignLib (foreignLibName)) -import Distribution.Types.LibraryName -import Distribution.Types.UnqualComponentName - import Distribution.CabalSpecVersion import Distribution.Fields.Pretty import Distribution.PackageDescription @@ -45,13 +39,12 @@ import Distribution.FieldGrammar (PrettyFieldGrammar', prettyFieldGrammar) import Distribution.PackageDescription.FieldGrammar - (benchmarkFieldGrammar, buildInfoFieldGrammar, executableFieldGrammar, flagFieldGrammar, - foreignLibFieldGrammar, libraryFieldGrammar, packageDescriptionFieldGrammar, - setupBInfoFieldGrammar, sourceRepoFieldGrammar, testSuiteFieldGrammar) + (benchmarkFieldGrammar, buildInfoFieldGrammar, executableFieldGrammar, flagFieldGrammar, foreignLibFieldGrammar, libraryFieldGrammar, + packageDescriptionFieldGrammar, setupBInfoFieldGrammar, sourceRepoFieldGrammar, testSuiteFieldGrammar) import qualified Distribution.PackageDescription.FieldGrammar as FG -import Text.PrettyPrint (Doc, char, hsep, parens, text, (<+>)) +import Text.PrettyPrint (Doc, char, hsep, parens, text) import qualified Data.ByteString.Lazy.Char8 as BS.Char8 diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/PackageDescription.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/PackageDescription.hs 2020-05-29 20:33:20.000000000 +0000 @@ -7,135 +7,91 @@ -- Maintainer : cabal-devel@haskell.org -- Portability : portable -- --- Backwards compatibility reexport of everything you need to know +-- Backwards compatibility reexport of most things you need to know -- about @.cabal@ files. module Distribution.PackageDescription ( - -- * Package descriptions - PackageDescription(..), - emptyPackageDescription, - buildType, - license, - BuildType(..), - knownBuildTypes, - allLibraries, - - -- ** Renaming (syntactic) - ModuleRenaming(..), - defaultRenaming, - - -- ** Libraries - Library(..), - ModuleReexport(..), - emptyLibrary, - withLib, - hasPublicLib, - hasLibs, - explicitLibModules, - libModulesAutogen, - - -- ** Executables - Executable(..), - emptyExecutable, - withExe, - hasExes, - exeModules, - exeModulesAutogen, - - -- * Tests - TestSuite(..), - TestSuiteInterface(..), - TestType(..), - testType, - knownTestTypes, - emptyTestSuite, - hasTests, - withTest, - testModules, - testModulesAutogen, - - -- * Benchmarks - Benchmark(..), - BenchmarkInterface(..), - BenchmarkType(..), - benchmarkType, - knownBenchmarkTypes, - emptyBenchmark, - hasBenchmarks, - withBenchmark, - benchmarkModules, - benchmarkModulesAutogen, - - -- * Build information - BuildInfo(..), - emptyBuildInfo, - allBuildInfo, - allLanguages, - allExtensions, - usedExtensions, - usesTemplateHaskellOrQQ, - hcOptions, - hcProfOptions, - hcSharedOptions, - hcStaticOptions, - - -- ** Supplementary build information - allBuildDepends, - enabledBuildDepends, - ComponentName(..), - LibraryName(..), - defaultLibName, - HookedBuildInfo, - emptyHookedBuildInfo, - updatePackageDescription, - - -- * package configuration - GenericPackageDescription(..), - PackageFlag(..), emptyFlag, - FlagName, mkFlagName, unFlagName, - FlagAssignment, mkFlagAssignment, unFlagAssignment, - nullFlagAssignment, showFlagValue, - diffFlagAssignment, lookupFlagAssignment, insertFlagAssignment, - dispFlagAssignment, parsecFlagAssignment, - findDuplicateFlagAssignments, - CondTree(..), ConfVar(..), Condition(..), - cNot, cAnd, cOr, - - -- * Source repositories - SourceRepo(..), - RepoKind(..), - RepoType(..), - KnownRepoType (..), - knownRepoTypes, - emptySourceRepo, - - -- * Custom setup build information - SetupBuildInfo(..), + -- * PD and GPD + module Distribution.Types.PackageDescription, + module Distribution.Types.GenericPackageDescription, + -- * Components + module Distribution.Types.ComponentName, + -- ** Library + module Distribution.Types.Library, + module Distribution.Types.LibraryName, + module Distribution.Types.LibraryVisibility, + -- ** Executable + module Distribution.Types.Executable, + module Distribution.Types.ExecutableScope, + -- ** TestSuite + module Distribution.Types.TestSuite, + module Distribution.Types.TestType, + module Distribution.Types.TestSuiteInterface, + -- ** Benchmark + module Distribution.Types.Benchmark, + module Distribution.Types.BenchmarkType, + module Distribution.Types.BenchmarkInterface, + -- ** Foreign library + module Distribution.Types.ForeignLib, + module Distribution.Types.ForeignLibType, + module Distribution.Types.ForeignLibOption, + -- * BuildInfo + module Distribution.Types.BuildType, + module Distribution.Types.BuildInfo, + module Distribution.Types.HookedBuildInfo, + module Distribution.Types.SetupBuildInfo, + -- * Flags + module Distribution.Types.Flag, + -- * Identifiers + module Distribution.Types.PackageId, + module Distribution.Types.PackageName, + module Distribution.Types.UnqualComponentName, + -- * Dependencies + module Distribution.Types.Dependency, + module Distribution.Types.ExeDependency, + module Distribution.Types.LegacyExeDependency, + module Distribution.Types.PkgconfigDependency, + -- * Condition trees + module Distribution.Types.CondTree, + module Distribution.Types.Condition, + module Distribution.Types.ConfVar, + -- * Source repository + module Distribution.Types.SourceRepo, ) where import Prelude () --import Distribution.Compat.Prelude -import Distribution.Types.Library -import Distribution.Types.TestSuite -import Distribution.Types.Executable import Distribution.Types.Benchmark -import Distribution.Types.TestType -import Distribution.Types.TestSuiteInterface -import Distribution.Types.BenchmarkType import Distribution.Types.BenchmarkInterface -import Distribution.Types.ModuleRenaming -import Distribution.Types.ModuleReexport +import Distribution.Types.BenchmarkType import Distribution.Types.BuildInfo -import Distribution.Types.SetupBuildInfo import Distribution.Types.BuildType -import Distribution.Types.GenericPackageDescription -import Distribution.Types.CondTree -import Distribution.Types.Condition -import Distribution.Types.PackageDescription import Distribution.Types.ComponentName -import Distribution.Types.LibraryName +import Distribution.Types.Condition +import Distribution.Types.CondTree +import Distribution.Types.ConfVar +import Distribution.Types.Dependency +import Distribution.Types.Executable +import Distribution.Types.ExecutableScope +import Distribution.Types.ExeDependency +import Distribution.Types.Flag +import Distribution.Types.ForeignLib +import Distribution.Types.ForeignLibOption +import Distribution.Types.ForeignLibType +import Distribution.Types.GenericPackageDescription import Distribution.Types.HookedBuildInfo +import Distribution.Types.LegacyExeDependency +import Distribution.Types.Library +import Distribution.Types.LibraryName +import Distribution.Types.LibraryVisibility +import Distribution.Types.PackageDescription +import Distribution.Types.PackageId +import Distribution.Types.PackageName +import Distribution.Types.PkgconfigDependency +import Distribution.Types.SetupBuildInfo import Distribution.Types.SourceRepo -import Distribution.Types.Flag -import Distribution.Types.ConfVar +import Distribution.Types.TestSuite +import Distribution.Types.TestSuiteInterface +import Distribution.Types.TestType +import Distribution.Types.UnqualComponentName diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Pretty.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Pretty.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Pretty.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Pretty.hs 2020-05-29 20:33:21.000000000 +0000 @@ -24,6 +24,10 @@ prettyVersioned :: CabalSpecVersion -> a -> PP.Doc prettyVersioned _ = pretty +-- | @since 3.4.0.0 +instance Pretty PP.Doc where + pretty = id + instance Pretty Bool where pretty = PP.text . show diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Bench.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Bench.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Bench.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Bench.hs 2020-05-29 20:33:20.000000000 +0000 @@ -32,7 +32,6 @@ import Distribution.Simple.Utils import Distribution.Pretty -import System.Exit ( ExitCode(..), exitFailure, exitSuccess ) import System.Directory ( doesFileExist ) import System.FilePath ( (), (<.>) ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Build/Macros.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Build/Macros.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Build/Macros.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Build/Macros.hs 2020-05-29 20:33:20.000000000 +0000 @@ -34,8 +34,6 @@ import Distribution.Simple.Program.Types import Distribution.Types.MungedPackageId import Distribution.Types.MungedPackageName -import Distribution.Types.PackageId -import Distribution.Types.PackageName (unPackageName) import Distribution.Pretty import qualified Distribution.Simple.Build.Macros.Z as Z diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Build.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Build.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Build.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Build.hs 2020-05-29 20:33:20.000000000 +0000 @@ -41,8 +41,8 @@ import Distribution.Types.LocalBuildInfo import Distribution.Types.MungedPackageId import Distribution.Types.MungedPackageName +import Distribution.Types.ModuleRenaming import Distribution.Types.TargetInfo -import Distribution.Types.UnqualComponentName import Distribution.Package import Distribution.Backpack diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/BuildPaths.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/BuildPaths.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/BuildPaths.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/BuildPaths.hs 2020-05-29 20:33:20.000000000 +0000 @@ -43,8 +43,6 @@ import Prelude () import Distribution.Compat.Prelude -import Distribution.Types.ForeignLib -import Distribution.Types.UnqualComponentName (unUnqualComponentName) import Distribution.Package import Distribution.ModuleName as ModuleName import Distribution.Compiler diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/BuildTarget.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/BuildTarget.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/BuildTarget.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/BuildTarget.hs 2020-05-29 20:33:20.000000000 +0000 @@ -57,9 +57,8 @@ import qualified Distribution.Compat.CharParsing as P import Control.Monad ( msum ) -import Data.List ( stripPrefix, groupBy, partition ) +import Data.List ( stripPrefix, groupBy ) import qualified Data.List.NonEmpty as NE -import Data.Either ( partitionEithers ) import System.FilePath as FilePath ( dropExtension, normalise, splitDirectories, joinPath, splitPath , hasTrailingPathSeparator ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/BuildToolDepends.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/BuildToolDepends.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/BuildToolDepends.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/BuildToolDepends.hs 2020-05-29 20:33:20.000000000 +0000 @@ -12,9 +12,6 @@ import Distribution.Package import Distribution.PackageDescription -import Distribution.Types.ExeDependency -import Distribution.Types.LegacyExeDependency -import Distribution.Types.UnqualComponentName -- | Desugar a "build-tools" entry into proper a executable dependency if -- possible. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Compiler.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Compiler.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Compiler.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Compiler.hs 2020-05-29 20:33:20.000000000 +0000 @@ -63,6 +63,7 @@ backpackSupported, arResponseFilesSupported, libraryDynDirSupported, + libraryVisibilitySupported, -- * Support for profiling detail levels ProfDetailLevel(..), @@ -80,7 +81,6 @@ import Language.Haskell.Extension import Distribution.Simple.Utils -import Control.Monad (join) import qualified Data.Map as Map (lookup) import System.Directory (canonicalizePath) @@ -381,6 +381,15 @@ GHCJS -> True _ -> False +-- | Does this compiler support a package database entry with: +-- "visibility"? +libraryVisibilitySupported :: Compiler -> Bool +libraryVisibilitySupported comp = case compilerFlavor comp of + GHC -> v >= mkVersion [8,8] + _ -> False + where + v = compilerVersion comp + -- | Utility function for GHC only features ghcSupported :: String -> Compiler -> Bool ghcSupported key comp = diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Configure.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Configure.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Configure.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Configure.hs 2020-05-29 20:33:20.000000000 +0000 @@ -54,7 +54,7 @@ , platformDefines, ) where -import qualified Prelude (tail) +import qualified Prelude as Unsafe (tail) import Distribution.Compat.Prelude import Distribution.Compiler @@ -68,7 +68,6 @@ import qualified Distribution.Simple.PackageIndex as PackageIndex import Distribution.Simple.PackageIndex (InstalledPackageIndex) import Distribution.PackageDescription -import Distribution.Types.PackageDescription import Distribution.PackageDescription.PrettyPrint import Distribution.PackageDescription.Configuration import Distribution.PackageDescription.Check hiding (doesFileExist) @@ -77,22 +76,13 @@ import Distribution.Simple.Setup as Setup import Distribution.Simple.BuildTarget import Distribution.Simple.LocalBuildInfo -import Distribution.Types.ExeDependency -import Distribution.Types.LegacyExeDependency import Distribution.Types.PackageVersionConstraint import Distribution.Types.PkgconfigVersion -import Distribution.Types.PkgconfigDependency import Distribution.Types.PkgconfigVersionRange import Distribution.Types.LocalBuildInfo -import Distribution.Types.LibraryName -import Distribution.Types.LibraryVisibility import Distribution.Types.ComponentRequestedSpec -import Distribution.Types.ForeignLib -import Distribution.Types.ForeignLibType -import Distribution.Types.ForeignLibOption import Distribution.Types.GivenComponent import Distribution.Types.Mixin -import Distribution.Types.UnqualComponentName import Distribution.Simple.Utils import Distribution.System import Distribution.Version @@ -112,8 +102,7 @@ import qualified Distribution.Simple.HaskellSuite as HaskellSuite import Control.Exception - ( ErrorCall, Exception, evaluate, throw, throwIO, try ) -import Control.Monad ( forM, forM_ ) + ( try ) import Data.List.NonEmpty ( nonEmpty ) import Distribution.Utils.Structured ( structuredDecodeOrFailIO, structuredEncode ) import Distribution.Compat.Directory ( listDirectory ) @@ -121,9 +110,7 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy.Char8 as BLC8 import Data.List - ( (\\), partition, inits, stripPrefix, intersect, dropWhileEnd ) -import Data.Either - ( partitionEithers ) + ( (\\), inits, stripPrefix, intersect, dropWhileEnd ) import qualified Data.Map as Map import System.Directory ( canonicalizePath, createDirectoryIfMissing, doesFileExist @@ -141,10 +128,9 @@ import Distribution.Parsec ( simpleParsec ) import Text.PrettyPrint - ( Doc, (<+>), ($+$), char, comma, hsep, nest + ( Doc, ($+$), char, comma, hsep, nest , punctuate, quotes, render, renderStyle, sep, text ) import Distribution.Compat.Environment ( lookupEnv ) -import Distribution.Compat.Exception ( catchExit, catchIO ) import qualified Distribution.Compat.NonEmptySet as NonEmptySet @@ -206,21 +192,17 @@ contents <- BS.readFile filename let (header, body) = BLC8.span (/='\n') (BLC8.fromChunks [contents]) - headerParseResult <- try $ evaluate $ parseHeader header - let (cabalId, compId) = - case headerParseResult of - Left (_ :: ErrorCall) -> throw ConfigStateFileBadHeader - Right x -> x + (cabalId, compId) <- parseHeader header let getStoredValue = do result <- structuredDecodeOrFailIO (BLC8.tail body) case result of - Left _ -> throw ConfigStateFileNoParse + Left _ -> throwIO ConfigStateFileNoParse Right x -> return x deferErrorIfBadVersion act | cabalId /= currentCabalId = do eResult <- try act - throw $ ConfigStateFileBadVersion cabalId compId eResult + throwIO $ ConfigStateFileBadVersion cabalId compId eResult | otherwise = act deferErrorIfBadVersion getStoredValue where @@ -274,16 +256,16 @@ -- | Parse the @setup-config@ file header, returning the package identifiers -- for Cabal and the compiler. parseHeader :: ByteString -- ^ The file contents. - -> (PackageIdentifier, PackageIdentifier) + -> IO (PackageIdentifier, PackageIdentifier) parseHeader header = case BLC8.words header of ["Saved", "package", "config", "for", pkgId, "written", "by", cabalId, "using", compId] -> - fromMaybe (throw ConfigStateFileBadHeader) $ do + maybe (throwIO ConfigStateFileBadHeader) return $ do _ <- simpleParsec (fromUTF8LBS pkgId) :: Maybe PackageIdentifier cabalId' <- simpleParsec (BLC8.unpack cabalId) compId' <- simpleParsec (BLC8.unpack compId) return (cabalId', compId') - _ -> throw ConfigStateFileNoHeader + _ -> throwIO ConfigStateFileNoHeader -- | Generate the @setup-config@ file header. showHeader :: PackageIdentifier -- ^ The processed package. @@ -1758,14 +1740,14 @@ checkDuplicateHeaders = do let relIncDirs = filter (not . isAbsolute) (collectField includeDirs) isHeader = isSuffixOf ".h" - genHeaders <- forM relIncDirs $ \dir -> + genHeaders <- for relIncDirs $ \dir -> fmap (dir ) . filter isHeader <$> listDirectory (buildDir lbi dir) `catchIO` (\_ -> return []) - srcHeaders <- forM relIncDirs $ \dir -> + srcHeaders <- for relIncDirs $ \dir -> fmap (dir ) . filter isHeader <$> listDirectory (baseDir lbi dir) `catchIO` (\_ -> return []) let commonHeaders = concat genHeaders `intersect` concat srcHeaders - forM_ commonHeaders $ \hdr -> do + for_ commonHeaders $ \hdr -> do warn verbosity $ "Duplicate header found in " ++ (buildDir lbi hdr) ++ " and " @@ -1777,7 +1759,7 @@ findOffendingHdr = ifBuildsWith allHeaders ccArgs (return Nothing) - (go . Prelude.tail . inits $ allHeaders) -- inits always contains at least [] + (go . Unsafe.tail . inits $ allHeaders) -- inits always contains at least [] where go [] = return Nothing -- cannot happen go (hdrs:hdrsInits) = @@ -2014,7 +1996,7 @@ where doCheck pkgr ipkg | maybe False (== pkgr) (IPI.pkgRoot ipkg) - = forM_ (IPI.libraryDirs ipkg) $ \libdir -> do + = for_ (IPI.libraryDirs ipkg) $ \libdir -> do -- When @prefix@ is not under @pkgroot@, -- @shortRelativePath prefix pkgroot@ will return a path with -- @..@s and following check will fail without @canonicalizePath@. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHC/EnvironmentParser.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHC/EnvironmentParser.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHC/EnvironmentParser.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHC/EnvironmentParser.hs 2020-05-29 20:33:21.000000000 +0000 @@ -17,8 +17,6 @@ import Distribution.Types.UnitId ( mkUnitId ) -import Control.Exception - ( Exception, throwIO ) import qualified Text.Parsec as P import Text.Parsec.String ( Parser, parseFromFile ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHC/Internal.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHC/Internal.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHC/Internal.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHC/Internal.hs 2020-05-29 20:33:21.000000000 +0000 @@ -53,7 +53,6 @@ import Distribution.Backpack import qualified Distribution.InstalledPackageInfo as IPI import Distribution.PackageDescription -import Distribution.Compat.Exception import Distribution.Lex import Distribution.Simple.Compiler import Distribution.Simple.Program.GHC @@ -64,6 +63,7 @@ import Distribution.Types.UnitId import Distribution.Types.LocalBuildInfo import Distribution.Types.TargetInfo +import Distribution.Types.ModuleRenaming import Distribution.Simple.Utils import Distribution.Simple.BuildPaths import Distribution.System @@ -669,9 +669,9 @@ renderGhcEnvironmentFileEntry :: GhcEnvironmentFileEntry -> String renderGhcEnvironmentFileEntry entry = case entry of GhcEnvFileComment comment -> format comment - where format = intercalate "\n" . map ("--" <+>) . lines - pref <+> "" = pref - pref <+> str = pref ++ " " ++ str + where format = intercalate "\n" . map ("--" <++>) . lines + pref <++> "" = pref + pref <++> str = pref ++ " " ++ str GhcEnvFilePackageId pkgid -> "package-id " ++ prettyShow pkgid GhcEnvFilePackageDb pkgdb -> case pkgdb of diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHC.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHC.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHC.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHC.hs 2020-05-29 20:33:20.000000000 +0000 @@ -104,10 +104,6 @@ import Distribution.System import Distribution.Verbosity import Distribution.Pretty -import Distribution.Types.ForeignLib -import Distribution.Types.ForeignLibType -import Distribution.Types.ForeignLibOption -import Distribution.Types.UnqualComponentName import Distribution.Utils.NubList import Language.Haskell.Extension diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHCJS.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHCJS.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/GHCJS.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/GHCJS.hs 2020-05-29 20:33:20.000000000 +0000 @@ -69,10 +69,6 @@ import Distribution.System import Distribution.Verbosity import Distribution.Pretty -import Distribution.Types.ForeignLib -import Distribution.Types.ForeignLibType -import Distribution.Types.ForeignLibOption -import Distribution.Types.UnqualComponentName import Distribution.Utils.NubList import Control.Monad (msum) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Glob.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Glob.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Glob.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Glob.hs 2020-05-29 20:33:20.000000000 +0000 @@ -28,8 +28,6 @@ import Prelude () import Distribution.Compat.Prelude -import Control.Monad (guard) - import Distribution.CabalSpecVersion import Distribution.Simple.Utils import Distribution.Verbosity diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/HaskellSuite.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/HaskellSuite.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/HaskellSuite.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/HaskellSuite.hs 2020-05-29 20:33:20.000000000 +0000 @@ -6,9 +6,6 @@ import Prelude () import Distribution.Compat.Prelude -import Data.Either (partitionEithers) - -import qualified Data.Map as Map (empty) import qualified Data.List.NonEmpty as NE import Distribution.Simple.Program @@ -25,7 +22,6 @@ import Distribution.PackageDescription import Distribution.Simple.LocalBuildInfo import Distribution.System (Platform) -import Distribution.Compat.Exception import Language.Haskell.Extension import Distribution.Simple.Program.Builtin @@ -83,7 +79,7 @@ compilerCompat = [], compilerLanguages = languages, compilerExtensions = extensions, - compilerProperties = Map.empty + compilerProperties = mempty } return (comp, confdCompiler, progdb2) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/PreProcess.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/PreProcess.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/PreProcess.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/PreProcess.hs 2020-05-29 20:33:21.000000000 +0000 @@ -53,9 +53,6 @@ import Distribution.Pretty import Distribution.Version import Distribution.Verbosity -import Distribution.Types.ForeignLib -import Distribution.Types.LibraryName -import Distribution.Types.UnqualComponentName import System.Directory (doesFileExist) import System.Info (os, arch) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Builtin.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Builtin.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Builtin.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Builtin.hs 2020-05-29 20:33:21.000000000 +0000 @@ -54,7 +54,6 @@ import Distribution.Simple.Program.Run import Distribution.Simple.Program.Types import Distribution.Simple.Utils -import Distribution.Compat.Exception import Distribution.Verbosity import Distribution.Version diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Db.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Db.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Db.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Db.hs 2020-05-29 20:33:21.000000000 +0000 @@ -73,8 +73,7 @@ import Distribution.Verbosity import Distribution.Version -import Control.Monad (join) -import Data.Tuple (swap) +import Data.Tuple (swap) import qualified Data.Map as Map diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/GHC.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/GHC.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/GHC.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/GHC.hs 2020-05-29 20:33:21.000000000 +0000 @@ -36,6 +36,7 @@ import Distribution.System import Distribution.Pretty import Distribution.Types.ComponentId +import Distribution.Types.ModuleRenaming import Distribution.Verbosity import Distribution.Version import Distribution.Utils.NubList diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/HcPkg.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/HcPkg.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/HcPkg.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/HcPkg.hs 2020-05-29 20:33:21.000000000 +0000 @@ -47,7 +47,6 @@ import Distribution.Compat.Prelude hiding (init) import Prelude () -import Distribution.Compat.Exception import Distribution.InstalledPackageInfo import Distribution.Parsec import Distribution.Pretty diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Hpc.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Hpc.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Hpc.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Hpc.hs 2020-05-29 20:33:21.000000000 +0000 @@ -19,7 +19,6 @@ import Prelude () import Distribution.Compat.Prelude -import Control.Monad (mapM) import System.Directory (makeRelativeToCurrentDirectory) import Distribution.ModuleName @@ -61,7 +60,7 @@ return passedDirs -- Prior to GHC 8.0, hpc assumes all .mix paths are relative. - hpcDirs'' <- mapM makeRelativeToCurrentDirectory hpcDirs' + hpcDirs'' <- traverse makeRelativeToCurrentDirectory hpcDirs' runProgramInvocation verbosity (markupInvocation hpc tixFile hpcDirs'' destDir excluded) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Run.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Run.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Program/Run.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Program/Run.hs 2020-05-29 20:33:21.000000000 +0000 @@ -38,8 +38,7 @@ import Distribution.Utils.Generic import Distribution.Verbosity -import System.Exit (ExitCode (..), exitWith) -import System.FilePath +import System.FilePath (searchPathSeparator) import qualified Data.ByteString.Lazy as LBS import qualified Data.Map as Map diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Register.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Register.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Register.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Register.hs 2020-05-29 20:33:21.000000000 +0000 @@ -87,7 +87,6 @@ import System.FilePath ((), (<.>), isAbsolute) import System.Directory -import Data.List (partition) import qualified Data.ByteString.Lazy.Char8 as BS.Char8 -- ----------------------------------------------------------------------------- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Setup.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Setup.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Setup.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Setup.hs 2020-05-29 20:33:21.000000000 +0000 @@ -101,15 +101,11 @@ import Distribution.Types.ComponentId import Distribution.Types.GivenComponent import Distribution.Types.Module -import Distribution.Types.PackageName import Distribution.Types.PackageVersionConstraint -import Distribution.Types.UnqualComponentName (unUnqualComponentName) import Distribution.Compat.Stack import Distribution.Compat.Semigroup (Last' (..), Option' (..)) -import Data.Function (on) - -- FIXME Not sure where this should live defaultDistPref :: FilePath defaultDistPref = "dist" @@ -611,8 +607,8 @@ "Force values for the given flags in Cabal conditionals in the .cabal file. E.g., --flags=\"debug -usebytestrings\" forces the flag \"debug\" to true and \"usebytestrings\" to false." configConfigurationsFlags (\v flags -> flags { configConfigurationsFlags = v }) (reqArg "FLAGS" - (parsecToReadE (\err -> "Invalid flag assignment: " ++ err) parsecFlagAssignment) - showFlagAssignment) + (parsecToReadE (\err -> "Invalid flag assignment: " ++ err) legacyParsecFlagAssignment) + legacyShowFlagAssignment') ,option "" ["extra-include-dirs"] "A list of directories to search for header files" @@ -727,16 +723,6 @@ reqArgFlag title _sf _lf d (fmap fromPathTemplate . get) (set . fmap toPathTemplate) -showFlagAssignment :: FlagAssignment -> [String] -showFlagAssignment = map showFlagValue' . unFlagAssignment - where - -- We can't use 'showFlagValue' because legacy custom-setups don't - -- support the '+' prefix in --flags; so we omit the (redundant) + prefix; - -- NB: we assume that we never have to set/enable '-'-prefixed flags here. - showFlagValue' :: (FlagName, Bool) -> String - showFlagValue' (f, True) = unFlagName f - showFlagValue' (f, False) = '-' : unFlagName f - readPackageDbList :: String -> [Maybe PackageDB] readPackageDbList "clear" = [Nothing] readPackageDbList "global" = [Just GlobalPackageDB] @@ -1880,7 +1866,7 @@ testFailWhenNoTestSuites :: Flag Bool, -- TODO: think about if/how options are passed to test exes testOptions :: [PathTemplate] - } deriving (Generic, Typeable) + } deriving (Show, Generic, Typeable) defaultTestFlags :: TestFlags defaultTestFlags = TestFlags { @@ -2000,7 +1986,7 @@ benchmarkDistPref :: Flag FilePath, benchmarkVerbosity :: Flag Verbosity, benchmarkOptions :: [PathTemplate] - } deriving (Generic, Typeable) + } deriving (Show, Generic, Typeable) defaultBenchmarkFlags :: BenchmarkFlags defaultBenchmarkFlags = BenchmarkFlags { diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/SrcDist.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/SrcDist.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/SrcDist.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/SrcDist.hs 2020-05-29 20:33:21.000000000 +0000 @@ -61,16 +61,13 @@ import Distribution.Simple.BuildPaths import Distribution.Simple.Program import Distribution.Pretty -import Distribution.Types.ForeignLib import Distribution.Verbosity -import Data.List (partition) import qualified Data.Map as Map import Data.Time (UTCTime, getCurrentTime, toGregorian, utctDay) import System.Directory ( doesFileExist ) import System.IO (IOMode(WriteMode), hPutStrLn, withFile) import System.FilePath ((), (<.>), dropExtension, isRelative) -import Control.Monad -- |Create a source distribution. sdist :: PackageDescription -- ^ information from the tarball @@ -189,7 +186,7 @@ , fmap concat . withAllFLib $ \flib@(ForeignLib { foreignLibBuildInfo = flibBi }) -> do biSrcs <- allSourcesBuildInfo verbosity rip cwd flibBi pps [] - defFiles <- mapM (findModDefFile verbosity cwd flibBi pps) + defFiles <- traverse (findModDefFile verbosity cwd flibBi pps) (foreignLibModDefFile flib) return (defFiles ++ biSrcs) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Test/ExeV10.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Test/ExeV10.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Test/ExeV10.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Test/ExeV10.hs 2020-05-29 20:33:21.000000000 +0000 @@ -31,7 +31,6 @@ import System.Directory ( createDirectoryIfMissing, doesDirectoryExist, doesFileExist , getCurrentDirectory, removeDirectoryRecursive ) -import System.Exit ( ExitCode(..) ) import System.FilePath ( (), (<.>) ) import System.IO ( hGetContents, stdout, stderr ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Test/LibV09.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Test/LibV09.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Test/LibV09.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Test/LibV09.hs 2020-05-29 20:33:21.000000000 +0000 @@ -39,7 +39,6 @@ , doesDirectoryExist, doesFileExist , getCurrentDirectory, removeDirectoryRecursive, removeFile , setCurrentDirectory ) -import System.Exit ( exitSuccess, exitWith, ExitCode(..) ) import System.FilePath ( (), (<.>) ) import System.IO ( hClose, hGetContents, hPutStr ) import System.Process (StdStream(..), waitForProcess) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Test.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Test.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Test.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Test.hs 2020-05-29 20:33:21.000000000 +0000 @@ -40,7 +40,6 @@ import System.Directory ( createDirectoryIfMissing, doesFileExist, getDirectoryContents , removeFile ) -import System.Exit ( exitFailure, exitSuccess ) import System.FilePath ( () ) -- |Perform the \"@.\/setup test@\" action. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Utils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Utils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple/Utils.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple/Utils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -188,7 +188,6 @@ import Distribution.Compat.Async import Distribution.Compat.CopyFile import Distribution.Compat.Internal.TempFile -import Distribution.Compat.Exception import Distribution.Compat.FilePath as FilePath import Distribution.Compat.Stack import Distribution.Verbosity @@ -221,8 +220,6 @@ , getModificationTime, createDirectory, removeDirectoryRecursive ) import System.Environment ( getProgName ) -import System.Exit - ( exitWith, ExitCode(..) ) import System.FilePath as FilePath ( normalise, (), (<.>) , getSearchPath, joinPath, takeDirectory, splitExtension @@ -237,7 +234,6 @@ import Foreign.C.Error (Errno (..), ePIPE) import Data.Time.Clock.POSIX (getPOSIXTime, POSIXTime) -import Control.Exception (IOException, evaluate, throwIO, fromException) import Numeric (showFFloat) import Distribution.Compat.Process (createProcess, rawSystem, runInteractiveProcess) import System.Process diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Simple.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Simple.hs 2020-05-29 20:33:20.000000000 +0000 @@ -98,7 +98,6 @@ import System.Environment (getArgs, getProgName) import System.Directory (removeFile, doesFileExist ,doesDirectoryExist, removeDirectoryRecursive) -import System.Exit (exitWith,ExitCode(..)) import System.FilePath (searchPathSeparator, takeDirectory, (), splitDirectories, dropDrive) import Distribution.Compat.ResponseFile (expandResponse) import Distribution.Compat.Directory (makeAbsolute) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/SPDX/LicenseExpression.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/SPDX/LicenseExpression.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/SPDX/LicenseExpression.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/SPDX/LicenseExpression.hs 2020-05-29 20:33:21.000000000 +0000 @@ -16,7 +16,6 @@ import Distribution.SPDX.LicenseListVersion import Distribution.SPDX.LicenseReference import Distribution.Utils.Generic (isAsciiAlphaNum) -import Text.PrettyPrint ((<+>)) import qualified Distribution.Compat.CharParsing as P import qualified Text.PrettyPrint as Disp diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/ComponentLocalBuildInfo.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/ComponentLocalBuildInfo.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/ComponentLocalBuildInfo.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/ComponentLocalBuildInfo.hs 2020-05-29 20:33:21.000000000 +0000 @@ -19,8 +19,8 @@ import Distribution.Types.UnitId import Distribution.Types.ComponentName import Distribution.Types.MungedPackageName +import Distribution.Types.ModuleRenaming -import Distribution.PackageDescription import qualified Distribution.InstalledPackageInfo as Installed -- | The first five fields are common across all algebraic variants. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/CondTree.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/CondTree.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/CondTree.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/CondTree.hs 2020-05-29 20:33:21.000000000 +0000 @@ -140,8 +140,9 @@ -- | Extract the condition matched by the given predicate from a cond tree. -- --- We use this mainly for extracting buildable conditions (see the Note above), --- but the function is in fact more general. +-- We use this mainly for extracting buildable conditions (see the Note in +-- Distribution.PackageDescription.Configuration), but the function is in fact +-- more general. extractCondition :: Eq v => (a -> Bool) -> CondTree v c a -> Condition v extractCondition p = go where diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/Dependency.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/Dependency.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/Dependency.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/Dependency.hs 2020-05-29 20:33:21.000000000 +0000 @@ -24,7 +24,6 @@ import Distribution.Types.LibraryName import Distribution.Types.PackageName import Distribution.Types.UnqualComponentName -import Text.PrettyPrint ((<+>)) import qualified Distribution.Compat.NonEmptySet as NonEmptySet import qualified Text.PrettyPrint as PP diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/Flag.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/Flag.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/Flag.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/Flag.hs 2020-05-29 20:33:21.000000000 +0000 @@ -2,11 +2,14 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Distribution.Types.Flag ( + -- * Package flag PackageFlag(..), emptyFlag, + -- * Flag name FlagName, mkFlagName, unFlagName, + -- * Flag assignment FlagAssignment, mkFlagAssignment, unFlagAssignment, @@ -17,8 +20,13 @@ nullFlagAssignment, showFlagValue, dispFlagAssignment, + showFlagAssignment, parsecFlagAssignment, parsecFlagAssignmentNonEmpty, + -- ** Legacy formats + legacyShowFlagAssignment, + legacyShowFlagAssignment', + legacyParsecFlagAssignment, ) where import Prelude () @@ -294,4 +302,45 @@ f <- parsec return (f, False) +-- | Show flag assignment. +-- +-- @since 3.4.0.0 +showFlagAssignment :: FlagAssignment -> String +showFlagAssignment = prettyShow . dispFlagAssignment + +------------------------------------------------------------------------------- +-- Legacy: without requiring + +------------------------------------------------------------------------------- + +-- | We need this as far as we support custom setups older than 2.2.0.0 +-- +-- @since 3.4.0.0 +legacyShowFlagAssignment :: FlagAssignment -> String +legacyShowFlagAssignment = + prettyShow . Disp.hsep . map Disp.text . legacyShowFlagAssignment' +-- | @since 3.4.0.0 +legacyShowFlagAssignment' :: FlagAssignment -> [String] +legacyShowFlagAssignment' = map legacyShowFlagValue . unFlagAssignment + +-- | @since 3.4.0.0 +legacyShowFlagValue :: (FlagName, Bool) -> String +legacyShowFlagValue (f, True) = unFlagName f +legacyShowFlagValue (f, False) = '-' : unFlagName f + +-- | +-- We need this as far as we support custom setups older than 2.2.0.0 +-- +-- @since 3.4.0.0 +legacyParsecFlagAssignment :: CabalParsing m => m FlagAssignment +legacyParsecFlagAssignment = mkFlagAssignment <$> + P.sepBy (onFlag <|> offFlag) P.skipSpaces1 + where + onFlag = do + _ <- P.optional (P.char '+') + f <- parsec + return (f, True) + offFlag = do + _ <- P.char '-' + f <- parsec + return (f, False) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/IncludeRenaming.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/IncludeRenaming.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/IncludeRenaming.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/IncludeRenaming.hs 2020-05-29 20:33:21.000000000 +0000 @@ -15,7 +15,7 @@ import qualified Distribution.Compat.CharParsing as P import Distribution.Parsec import Distribution.Pretty -import Text.PrettyPrint (text, (<+>)) +import Text.PrettyPrint (text) import qualified Text.PrettyPrint as Disp -- --------------------------------------------------------------------------- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs 2020-05-17 22:38:07.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs 2020-05-29 20:33:20.000000000 +0000 @@ -47,10 +47,10 @@ -- https://ghc.haskell.org/trac/ghc/ticket/13253 might be the cause. -- -- The workaround is to prevent GHC optimising the code: -infixl 4 <+> -(<+>) :: Applicative f => f (a -> b) -> f a -> f b -f <+> x = f <*> x -{-# NOINLINE (<+>) #-} +infixl 4 <@> +(<@>) :: Applicative f => f (a -> b) -> f a -> f b +f <@> x = f <*> x +{-# NOINLINE (<@>) #-} ipiFieldGrammar :: ( FieldGrammar c g, Applicative (g InstalledPackageInfo), Applicative (g Basic) @@ -78,47 +78,47 @@ --- https://github.com/haskell/cabal/commit/40f3601e17024f07e0da8e64d3dd390177ce908b ^^^ deprecatedSince CabalSpecV1_22 "hugs isn't supported anymore" -- Very basic fields: name, version, package-name, lib-name and visibility - <+> blurFieldGrammar basic basicFieldGrammar + <@> blurFieldGrammar basic basicFieldGrammar -- Basic fields - <+> optionalFieldDef "id" L.installedUnitId (mkUnitId "") - <+> optionalFieldDefAla "instantiated-with" InstWith L.instantiatedWith [] - <+> optionalFieldDefAla "key" CompatPackageKey L.compatPackageKey "" - <+> optionalFieldDefAla "license" SpecLicenseLenient L.license (Left SPDX.NONE) - <+> freeTextFieldDefST "copyright" L.copyright - <+> freeTextFieldDefST "maintainer" L.maintainer - <+> freeTextFieldDefST "author" L.author - <+> freeTextFieldDefST "stability" L.stability - <+> freeTextFieldDefST "homepage" L.homepage - <+> freeTextFieldDefST "package-url" L.pkgUrl - <+> freeTextFieldDefST "synopsis" L.synopsis - <+> freeTextFieldDefST "description" L.description - <+> freeTextFieldDefST "category" L.category + <@> optionalFieldDef "id" L.installedUnitId (mkUnitId "") + <@> optionalFieldDefAla "instantiated-with" InstWith L.instantiatedWith [] + <@> optionalFieldDefAla "key" CompatPackageKey L.compatPackageKey "" + <@> optionalFieldDefAla "license" SpecLicenseLenient L.license (Left SPDX.NONE) + <@> freeTextFieldDefST "copyright" L.copyright + <@> freeTextFieldDefST "maintainer" L.maintainer + <@> freeTextFieldDefST "author" L.author + <@> freeTextFieldDefST "stability" L.stability + <@> freeTextFieldDefST "homepage" L.homepage + <@> freeTextFieldDefST "package-url" L.pkgUrl + <@> freeTextFieldDefST "synopsis" L.synopsis + <@> freeTextFieldDefST "description" L.description + <@> freeTextFieldDefST "category" L.category -- Installed fields - <+> optionalFieldDef "abi" L.abiHash (mkAbiHash "") - <+> booleanFieldDef "indefinite" L.indefinite False - <+> booleanFieldDef "exposed" L.exposed False - <+> monoidalFieldAla "exposed-modules" ExposedModules L.exposedModules - <+> monoidalFieldAla "hidden-modules" (alaList' FSep MQuoted) L.hiddenModules - <+> booleanFieldDef "trusted" L.trusted False - <+> monoidalFieldAla "import-dirs" (alaList' FSep FilePathNT) L.importDirs - <+> monoidalFieldAla "library-dirs" (alaList' FSep FilePathNT) L.libraryDirs - <+> monoidalFieldAla "dynamic-library-dirs" (alaList' FSep FilePathNT) L.libraryDynDirs - <+> optionalFieldDefAla "data-dir" FilePathNT L.dataDir "" - <+> monoidalFieldAla "hs-libraries" (alaList' FSep Token) L.hsLibraries - <+> monoidalFieldAla "extra-libraries" (alaList' FSep Token) L.extraLibraries - <+> monoidalFieldAla "extra-ghci-libraries" (alaList' FSep Token) L.extraGHCiLibraries - <+> monoidalFieldAla "include-dirs" (alaList' FSep FilePathNT) L.includeDirs - <+> monoidalFieldAla "includes" (alaList' FSep FilePathNT) L.includes - <+> monoidalFieldAla "depends" (alaList FSep) L.depends - <+> monoidalFieldAla "abi-depends" (alaList FSep) L.abiDepends - <+> monoidalFieldAla "cc-options" (alaList' FSep Token) L.ccOptions - <+> monoidalFieldAla "cxx-options" (alaList' FSep Token) L.cxxOptions - <+> monoidalFieldAla "ld-options" (alaList' FSep Token) L.ldOptions - <+> monoidalFieldAla "framework-dirs" (alaList' FSep FilePathNT) L.frameworkDirs - <+> monoidalFieldAla "frameworks" (alaList' FSep Token) L.frameworks - <+> monoidalFieldAla "haddock-interfaces" (alaList' FSep FilePathNT) L.haddockInterfaces - <+> monoidalFieldAla "haddock-html" (alaList' FSep FilePathNT) L.haddockHTMLs - <+> optionalFieldAla "pkgroot" FilePathNT L.pkgRoot + <@> optionalFieldDef "abi" L.abiHash (mkAbiHash "") + <@> booleanFieldDef "indefinite" L.indefinite False + <@> booleanFieldDef "exposed" L.exposed False + <@> monoidalFieldAla "exposed-modules" ExposedModules L.exposedModules + <@> monoidalFieldAla "hidden-modules" (alaList' FSep MQuoted) L.hiddenModules + <@> booleanFieldDef "trusted" L.trusted False + <@> monoidalFieldAla "import-dirs" (alaList' FSep FilePathNT) L.importDirs + <@> monoidalFieldAla "library-dirs" (alaList' FSep FilePathNT) L.libraryDirs + <@> monoidalFieldAla "dynamic-library-dirs" (alaList' FSep FilePathNT) L.libraryDynDirs + <@> optionalFieldDefAla "data-dir" FilePathNT L.dataDir "" + <@> monoidalFieldAla "hs-libraries" (alaList' FSep Token) L.hsLibraries + <@> monoidalFieldAla "extra-libraries" (alaList' FSep Token) L.extraLibraries + <@> monoidalFieldAla "extra-ghci-libraries" (alaList' FSep Token) L.extraGHCiLibraries + <@> monoidalFieldAla "include-dirs" (alaList' FSep FilePathNT) L.includeDirs + <@> monoidalFieldAla "includes" (alaList' FSep FilePathNT) L.includes + <@> monoidalFieldAla "depends" (alaList FSep) L.depends + <@> monoidalFieldAla "abi-depends" (alaList FSep) L.abiDepends + <@> monoidalFieldAla "cc-options" (alaList' FSep Token) L.ccOptions + <@> monoidalFieldAla "cxx-options" (alaList' FSep Token) L.cxxOptions + <@> monoidalFieldAla "ld-options" (alaList' FSep Token) L.ldOptions + <@> monoidalFieldAla "framework-dirs" (alaList' FSep FilePathNT) L.frameworkDirs + <@> monoidalFieldAla "frameworks" (alaList' FSep Token) L.frameworks + <@> monoidalFieldAla "haddock-interfaces" (alaList' FSep FilePathNT) L.haddockInterfaces + <@> monoidalFieldAla "haddock-html" (alaList' FSep FilePathNT) L.haddockHTMLs + <@> optionalFieldAla "pkgroot" FilePathNT L.pkgRoot where mkInstalledPackageInfo _ Basic {..} = InstalledPackageInfo -- _basicPkgName is not used @@ -297,7 +297,7 @@ <*> optionalFieldDefAla "version" MQuoted basicVersion nullVersion <*> optionalField "package-name" basicPkgName <*> optionalField "lib-name" basicLibName - <+> optionalFieldDef "visibility" basicLibVisibility LibraryVisibilityPrivate + <*> optionalFieldDef "visibility" basicLibVisibility LibraryVisibilityPrivate where mkBasic n v pn ln lv = Basic n v pn ln' lv' where diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/LegacyExeDependency.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/LegacyExeDependency.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/LegacyExeDependency.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/LegacyExeDependency.hs 2020-05-29 20:33:21.000000000 +0000 @@ -12,7 +12,7 @@ import Distribution.Version (VersionRange, anyVersion) import qualified Distribution.Compat.CharParsing as P -import Text.PrettyPrint (text, (<+>)) +import qualified Text.PrettyPrint as Disp -- | Describes a legacy `build-tools`-style dependency on an executable -- @@ -31,8 +31,8 @@ instance NFData LegacyExeDependency where rnf = genericRnf instance Pretty LegacyExeDependency where - pretty (LegacyExeDependency name ver) = - text name <+> pretty ver + pretty (LegacyExeDependency name ver) = + Disp.text name <+> pretty ver instance Parsec LegacyExeDependency where parsec = do diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/Mixin.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/Mixin.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/Mixin.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/Mixin.hs 2020-05-29 20:33:21.000000000 +0000 @@ -8,8 +8,6 @@ import Distribution.Compat.Prelude import Prelude () -import Text.PrettyPrint ((<+>)) - import Distribution.Parsec import Distribution.Pretty import Distribution.Types.IncludeRenaming diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/ModuleReexport.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/ModuleReexport.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/ModuleReexport.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/ModuleReexport.hs 2020-05-29 20:33:21.000000000 +0000 @@ -14,8 +14,7 @@ import Distribution.Types.PackageName import qualified Distribution.Compat.CharParsing as P -import Text.PrettyPrint ((<+>)) -import qualified Text.PrettyPrint as Disp +import qualified Text.PrettyPrint as Disp -- ----------------------------------------------------------------------------- -- Module re-exports diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/ModuleRenaming.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/ModuleRenaming.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/ModuleRenaming.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/ModuleRenaming.hs 2020-05-29 20:33:21.000000000 +0000 @@ -20,7 +20,7 @@ import qualified Data.Map as Map import qualified Data.Set as Set import qualified Distribution.Compat.CharParsing as P -import Text.PrettyPrint (hsep, parens, punctuate, text, (<+>), comma) +import Text.PrettyPrint (hsep, parens, punctuate, text, comma) -- | Renaming applied to the modules provided by a package. -- The boolean indicates whether or not to also include all of the diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/PackageVersionConstraint.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/PackageVersionConstraint.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/PackageVersionConstraint.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/PackageVersionConstraint.hs 2020-05-29 20:33:21.000000000 +0000 @@ -18,7 +18,6 @@ import Distribution.Version (simplifyVersionRange) import qualified Distribution.Compat.CharParsing as P -import Text.PrettyPrint ((<+>)) -- | A version constraint on a package. Different from 'ExeDependency' and -- 'Dependency' since it does not specify the need for a component, not even diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/PkgconfigDependency.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/PkgconfigDependency.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/PkgconfigDependency.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/PkgconfigDependency.hs 2020-05-29 20:33:21.000000000 +0000 @@ -14,7 +14,6 @@ import Distribution.Pretty import qualified Distribution.Compat.CharParsing as P -import Text.PrettyPrint ((<+>)) -- | Describes a dependency on a pkg-config library -- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/VersionRange/Internal.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/VersionRange/Internal.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Types/VersionRange/Internal.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Types/VersionRange/Internal.hs 2020-05-29 20:33:21.000000000 +0000 @@ -42,7 +42,6 @@ import Distribution.Parsec import Distribution.Pretty import Distribution.Utils.Generic (unsnoc) -import Text.PrettyPrint ((<+>)) import qualified Distribution.Compat.CharParsing as P import qualified Distribution.Compat.DList as DList diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Utils/Generic.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Utils/Generic.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/Distribution/Utils/Generic.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/Distribution/Utils/Generic.hs 2020-05-29 20:33:21.000000000 +0000 @@ -90,8 +90,6 @@ import Data.Bits ((.&.), (.|.), shiftL) import Data.List ( isInfixOf ) -import Data.Ord - ( comparing ) import qualified Data.ByteString.Lazy as BS import qualified Data.Set as Set diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/tests/UnitTests/Distribution/Version.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/tests/UnitTests/Distribution/Version.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/Cabal-3.3.0.0/tests/UnitTests/Distribution/Version.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/Cabal-3.3.0.0/tests/UnitTests/Distribution/Version.hs 2020-05-29 20:33:21.000000000 +0000 @@ -16,7 +16,7 @@ import Data.Typeable (typeOf) import Math.NumberTheory.Logarithms (intLog2) import Text.PrettyPrint as Disp (text, render, hcat - ,punctuate, int, char, (<+>)) + ,punctuate, int, char) import Test.Tasty import Test.Tasty.QuickCheck import qualified Test.Laws as Laws @@ -24,7 +24,6 @@ import Test.QuickCheck.Instances.Cabal () import Data.Maybe (fromJust) -import Data.Function (on) versionTests :: [TestTree] versionTests = diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/cabal-install.cabal cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/cabal-install.cabal --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/cabal-install.cabal 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/cabal-install.cabal 2020-05-29 20:33:21.000000000 +0000 @@ -80,8 +80,10 @@ tests/IntegrationTests2/targets/multiple-tests/cabal.project tests/IntegrationTests2/targets/multiple-tests/p.cabal tests/IntegrationTests2/targets/simple/P.hs + tests/IntegrationTests2/targets/simple/app/Main.hs tests/IntegrationTests2/targets/simple/cabal.project tests/IntegrationTests2/targets/simple/p.cabal + tests/IntegrationTests2/targets/simple/q/Q.hs tests/IntegrationTests2/targets/simple/q/QQ.hs tests/IntegrationTests2/targets/simple/q/q.cabal tests/IntegrationTests2/targets/test-only/p.cabal @@ -251,14 +253,17 @@ Distribution.Client.SrcDist Distribution.Client.Store Distribution.Client.Tar + Distribution.Client.TargetProblem Distribution.Client.TargetSelector Distribution.Client.Targets Distribution.Client.Types Distribution.Client.Types.AllowNewer Distribution.Client.Types.BuildResults - Distribution.Client.Types.Credentials Distribution.Client.Types.ConfiguredId Distribution.Client.Types.ConfiguredPackage + Distribution.Client.Types.Credentials + Distribution.Client.Types.InstallMethod + Distribution.Client.Types.OverwritePolicy Distribution.Client.Types.PackageLocation Distribution.Client.Types.PackageSpecifier Distribution.Client.Types.ReadyPackage @@ -351,7 +356,7 @@ random >= 1 && < 1.2, stm >= 2.0 && < 2.6, tar >= 0.5.0.3 && < 0.6, - time >= 1.5.0.1 && < 1.10, + time >= 1.5.0.1 && < 1.11, transformers >= 0.4.2.0 && < 0.6, zlib >= 0.5.3 && < 0.7, hackage-security >= 0.6.0.1 && < 0.7, diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Storage.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Storage.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Storage.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Storage.hs 2020-05-29 20:33:21.000000000 +0000 @@ -24,6 +24,9 @@ fromPlanningFailure, ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.BuildReports.Anonymous (BuildReport, showBuildReport, newBuildReport) import qualified Distribution.Client.BuildReports.Anonymous as BuildReport @@ -47,12 +50,11 @@ import Distribution.Compiler ( CompilerId(..), CompilerInfo(..) ) import Distribution.Simple.Utils - ( comparing, equating ) + ( equating ) -import Data.List - ( groupBy, sortBy ) -import Data.Maybe - ( mapMaybe ) +import Data.List.NonEmpty + ( groupBy ) +import qualified Data.List as L import System.FilePath ( (), takeDirectory ) import System.Directory @@ -71,8 +73,8 @@ separate :: [(BuildReport, Maybe Repo)] -> [(Repo, [BuildReport])] separate = map (\rs@((_,repo,_):_) -> (repo, [ r | (r,_,_) <- rs ])) - . map concat - . groupBy (equating (repoName . head)) + . map (concatMap toList) + . L.groupBy (equating (repoName . head)) . sortBy (comparing (repoName . head)) . groupBy (equating repoName) . onlyRemote @@ -115,7 +117,7 @@ platform groupByFileName = map (\grp@((filename,_):_) -> (filename, map snd grp)) - . groupBy (equating fst) + . L.groupBy (equating fst) . sortBy (comparing fst) -- ------------------------------------------------------------ diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Types.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Types.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Types.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Types.hs 2020-05-29 20:33:21.000000000 +0000 @@ -26,11 +26,8 @@ import Distribution.Compiler (CompilerId (..)) import Distribution.PackageDescription (FlagAssignment) -import Distribution.Parsec (Parsec (..)) -import Distribution.Pretty (Pretty (..)) import Distribution.System (Arch, OS) import Distribution.Types.PackageId (PackageIdentifier) -import Text.PrettyPrint ((<+>)) ------------------------------------------------------------------------------- -- ReportLevel diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Upload.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Upload.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Upload.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/BuildReports/Upload.hs 2020-05-29 20:33:21.000000000 +0000 @@ -7,6 +7,9 @@ , uploadReports ) where +import Distribution.Client.Compat.Prelude +import Prelude () + {- import Network.Browser ( BrowserAction, request, setAllowRedirects ) @@ -17,14 +20,10 @@ -} import Network.URI (URI, uriPath) --parseRelativeReference, relativeTo) -import Control.Monad - ( forM_ ) import System.FilePath.Posix ( () ) import qualified Distribution.Client.BuildReports.Anonymous as BuildReport import Distribution.Client.BuildReports.Anonymous (BuildReport, showBuildReport) -import Distribution.Pretty (prettyShow) -import Distribution.Verbosity (Verbosity) import Distribution.Simple.Utils (die') import Distribution.Client.HttpUtils import Distribution.Client.Setup @@ -35,7 +34,7 @@ uploadReports :: Verbosity -> RepoContext -> (String, String) -> URI -> [(BuildReport, Maybe BuildLog)] -> IO () uploadReports verbosity repoCtxt auth uri reports = do - forM_ reports $ \(report, mbBuildLog) -> do + for_ reports $ \(report, mbBuildLog) -> do buildId <- postBuildReport verbosity repoCtxt auth uri report case mbBuildLog of Just buildLog -> putBuildLog verbosity repoCtxt auth buildId buildLog diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Check.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Check.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Check.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Check.hs 2020-05-29 20:33:21.000000000 +0000 @@ -28,7 +28,6 @@ (parseGenericPackageDescription, runParseResult) import Distribution.Parsec (PWarning (..), showPError, showPWarning) import Distribution.Simple.Utils (defaultPackageDesc, die', notice, warn) -import Distribution.Verbosity (Verbosity) import System.IO (hPutStr, stderr) import qualified Data.ByteString as BS diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdBench.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdBench.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdBench.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdBench.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,4 +1,4 @@ -{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: bench -- @@ -8,35 +8,38 @@ benchAction, -- * Internals exposed for testing - TargetProblem(..), + componentNotBenchmarkProblem, + isSubComponentProblem, + noBenchmarksProblem, selectPackageTargets, selectComponentTarget ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.ProjectOrchestration import Distribution.Client.CmdErrorMessages - + ( renderTargetSelector, showTargetSelector, renderTargetProblem, + renderTargetProblemNoTargets, plural, targetSelectorPluralPkgs, + targetSelectorFilter ) +import Distribution.Client.TargetProblem + ( TargetProblem (..) ) +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags ) -import qualified Distribution.Client.Setup as Client -import Distribution.Simple.Setup - ( HaddockFlags, TestFlags, BenchmarkFlags, fromFlagOrDefault ) + ( GlobalFlags, ConfigFlags(..) ) +import Distribution.Simple.Flag + ( fromFlagOrDefault ) import Distribution.Simple.Command ( CommandUI(..), usageAlternatives ) -import Distribution.Pretty - ( prettyShow ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import Distribution.Simple.Utils ( wrapText, die' ) -import Control.Monad (when) - - -benchCommand :: CommandUI ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - ) -benchCommand = Client.installCommand { +benchCommand :: CommandUI (NixStyleFlags ()) +benchCommand = CommandUI { commandName = "v2-bench", commandSynopsis = "Run benchmarks", commandUsage = usageAlternatives "v2-bench" [ "[TARGETS] [FLAGS]" ], @@ -65,6 +68,9 @@ ++ " Run the benchmark built with '-O2' (including local libs used)\n\n" ++ cmdCommonHelpTextNewBuildBeta + + , commandDefaultFlags = defaultNixStyleFlags () + , commandOptions = nixStyleOptions (const []) } @@ -75,12 +81,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -benchAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags ) - -> [String] -> GlobalFlags -> IO () -benchAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags ) - targetStrings globalFlags = do +benchAction :: NixStyleFlags () -> [String] -> GlobalFlags -> IO () +benchAction flags@NixStyleFlags {..} targetStrings globalFlags = do baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand @@ -102,7 +104,6 @@ $ resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors @@ -119,11 +120,8 @@ runProjectPostBuildPhase verbosity baseCtx buildCtx buildOutcomes where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags -- | This defines what a 'TargetSelector' means for the @bench@ command. -- It selects the 'AvailableTarget's that the 'TargetSelector' refers to, @@ -133,7 +131,7 @@ -- or fail if there are no benchmarks or no buildable benchmarks. -- selectPackageTargets :: TargetSelector - -> [AvailableTarget k] -> Either TargetProblem [k] + -> [AvailableTarget k] -> Either BenchTargetProblem [k] selectPackageTargets targetSelector targets -- If there are any buildable benchmark targets then we select those @@ -146,7 +144,7 @@ -- If there are no benchmarks but some other targets then we report that | not (null targets) - = Left (TargetProblemNoBenchmarks targetSelector) + = Left (noBenchmarksProblem targetSelector) -- If there are no targets at all then we report that | otherwise @@ -168,34 +166,27 @@ -- to the basic checks on being buildable etc. -- selectComponentTarget :: SubComponentTarget - -> AvailableTarget k -> Either TargetProblem k + -> AvailableTarget k -> Either BenchTargetProblem k selectComponentTarget subtarget@WholeComponent t | CBenchName _ <- availableTargetComponentName t - = either (Left . TargetProblemCommon) return $ - selectComponentTargetBasic subtarget t + = selectComponentTargetBasic subtarget t | otherwise - = Left (TargetProblemComponentNotBenchmark (availableTargetPackageId t) - (availableTargetComponentName t)) + = Left (componentNotBenchmarkProblem + (availableTargetPackageId t) + (availableTargetComponentName t)) selectComponentTarget subtarget t - = Left (TargetProblemIsSubComponent (availableTargetPackageId t) - (availableTargetComponentName t) - subtarget) + = Left (isSubComponentProblem + (availableTargetPackageId t) + (availableTargetComponentName t) + subtarget) -- | The various error conditions that can occur when matching a -- 'TargetSelector' against 'AvailableTarget's for the @bench@ command. -- -data TargetProblem = - TargetProblemCommon TargetProblemCommon - - -- | The 'TargetSelector' matches benchmarks but none are buildable - | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] - - -- | There are no targets at all - | TargetProblemNoTargets TargetSelector - +data BenchProblem = -- | The 'TargetSelector' matches targets but no benchmarks - | TargetProblemNoBenchmarks TargetSelector + TargetProblemNoBenchmarks TargetSelector -- | The 'TargetSelector' refers to a component that is not a benchmark | TargetProblemComponentNotBenchmark PackageId ComponentName @@ -204,25 +195,30 @@ | TargetProblemIsSubComponent PackageId ComponentName SubComponentTarget deriving (Eq, Show) -reportTargetProblems :: Verbosity -> [TargetProblem] -> IO a -reportTargetProblems verbosity = - die' verbosity . unlines . map renderTargetProblem -renderTargetProblem :: TargetProblem -> String -renderTargetProblem (TargetProblemCommon problem) = - renderTargetProblemCommon "run" problem +type BenchTargetProblem = TargetProblem BenchProblem -renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) = - renderTargetProblemNoneEnabled "benchmark" targetSelector targets +noBenchmarksProblem :: TargetSelector -> TargetProblem BenchProblem +noBenchmarksProblem = CustomTargetProblem . TargetProblemNoBenchmarks -renderTargetProblem (TargetProblemNoBenchmarks targetSelector) = - "Cannot run benchmarks for the target '" ++ showTargetSelector targetSelector - ++ "' which refers to " ++ renderTargetSelector targetSelector - ++ " because " - ++ plural (targetSelectorPluralPkgs targetSelector) "it does" "they do" - ++ " not contain any benchmarks." +componentNotBenchmarkProblem :: PackageId -> ComponentName -> TargetProblem BenchProblem +componentNotBenchmarkProblem pkgid name = CustomTargetProblem $ + TargetProblemComponentNotBenchmark pkgid name + +isSubComponentProblem + :: PackageId + -> ComponentName + -> SubComponentTarget + -> TargetProblem BenchProblem +isSubComponentProblem pkgid name subcomponent = CustomTargetProblem $ + TargetProblemIsSubComponent pkgid name subcomponent -renderTargetProblem (TargetProblemNoTargets targetSelector) = +reportTargetProblems :: Verbosity -> [BenchTargetProblem] -> IO a +reportTargetProblems verbosity = + die' verbosity . unlines . map renderBenchTargetProblem + +renderBenchTargetProblem :: BenchTargetProblem -> String +renderBenchTargetProblem (TargetProblemNoTargets targetSelector) = case targetSelectorFilter targetSelector of Just kind | kind /= BenchKind -> "The bench command is for running benchmarks, but the target '" @@ -230,8 +226,18 @@ ++ renderTargetSelector targetSelector ++ "." _ -> renderTargetProblemNoTargets "benchmark" targetSelector +renderBenchTargetProblem problem = + renderTargetProblem "benchmark" renderBenchProblem problem + +renderBenchProblem :: BenchProblem -> String +renderBenchProblem (TargetProblemNoBenchmarks targetSelector) = + "Cannot run benchmarks for the target '" ++ showTargetSelector targetSelector + ++ "' which refers to " ++ renderTargetSelector targetSelector + ++ " because " + ++ plural (targetSelectorPluralPkgs targetSelector) "it does" "they do" + ++ " not contain any benchmarks." -renderTargetProblem (TargetProblemComponentNotBenchmark pkgid cname) = +renderBenchProblem (TargetProblemComponentNotBenchmark pkgid cname) = "The bench command is for running benchmarks, but the target '" ++ showTargetSelector targetSelector ++ "' refers to " ++ renderTargetSelector targetSelector ++ " from the package " @@ -239,7 +245,7 @@ where targetSelector = TargetComponent pkgid cname WholeComponent -renderTargetProblem (TargetProblemIsSubComponent pkgid cname subtarget) = +renderBenchProblem (TargetProblemIsSubComponent pkgid cname subtarget) = "The bench command can only run benchmarks as a whole, " ++ "not files or modules within them, but the target '" ++ showTargetSelector targetSelector ++ "' refers to " diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdBuild.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdBuild.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdBuild.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdBuild.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,3 +1,4 @@ +{-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: build -- module Distribution.Client.CmdBuild ( @@ -6,7 +7,6 @@ buildAction, -- * Internals exposed for testing - TargetProblem(..), selectPackageTargets, selectComponentTarget ) where @@ -15,30 +15,26 @@ import Distribution.Client.Compat.Prelude import Distribution.Client.ProjectOrchestration +import Distribution.Client.TargetProblem + ( TargetProblem (..), TargetProblem' ) import Distribution.Client.CmdErrorMessages +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags - , liftOptions, yesNoOpt ) -import qualified Distribution.Client.Setup as Client -import Distribution.Simple.Setup - ( HaddockFlags, TestFlags, BenchmarkFlags - , Flag(..), toFlag, fromFlag, fromFlagOrDefault ) + ( GlobalFlags, ConfigFlags(..), yesNoOpt ) +import Distribution.Simple.Flag ( Flag(..), toFlag, fromFlag, fromFlagOrDefault ) import Distribution.Simple.Command - ( CommandUI(..), usageAlternatives, option ) + ( CommandUI(..), usageAlternatives, option, optionName ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import Distribution.Simple.Utils ( wrapText, die' ) import qualified Data.Map as Map -buildCommand :: - CommandUI - (BuildFlags, ( ConfigFlags, ConfigExFlags - , InstallFlags, HaddockFlags - , TestFlags, BenchmarkFlags )) +buildCommand :: CommandUI (NixStyleFlags BuildFlags) buildCommand = CommandUI { commandName = "v2-build", commandSynopsis = "Compile targets within the project.", @@ -70,24 +66,17 @@ ++ " Build the component in profiling mode " ++ "(including dependencies as needed)\n\n" - ++ cmdCommonHelpTextNewBuildBeta, - commandDefaultFlags = - (defaultBuildFlags, commandDefaultFlags Client.installCommand), - commandOptions = \ showOrParseArgs -> - liftOptions snd setSnd - (commandOptions Client.installCommand showOrParseArgs) ++ - liftOptions fst setFst - [ option [] ["only-configure"] - "Instead of performing a full build just run the configure step" - buildOnlyConfigure (\v flags -> flags { buildOnlyConfigure = v }) - (yesNoOpt showOrParseArgs) - ] + ++ cmdCommonHelpTextNewBuildBeta + , commandDefaultFlags = defaultNixStyleFlags defaultBuildFlags + , commandOptions = filter (\o -> optionName o /= "ignore-project") + . nixStyleOptions (\showOrParseArgs -> + [ option [] ["only-configure"] + "Instead of performing a full build just run the configure step" + buildOnlyConfigure (\v flags -> flags { buildOnlyConfigure = v }) + (yesNoOpt showOrParseArgs) + ]) } - where - setFst a (_,b) = (a,b) - setSnd b (a,_) = (a,b) - data BuildFlags = BuildFlags { buildOnlyConfigure :: Flag Bool } @@ -104,16 +93,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -buildAction :: - ( BuildFlags - , ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags )) - -> [String] -> GlobalFlags -> IO () -buildAction - ( buildFlags - , ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags )) - targetStrings globalFlags = do +buildAction :: NixStyleFlags BuildFlags -> [String] -> GlobalFlags -> IO () +buildAction flags@NixStyleFlags { extraFlags = buildFlags, ..} targetStrings globalFlags = do -- TODO: This flags defaults business is ugly let onlyConfigure = fromFlag (buildOnlyConfigure defaultBuildFlags <> buildOnlyConfigure buildFlags) @@ -132,11 +113,10 @@ -- Interpret the targets on the command line as build targets -- (as opposed to say repl or haddock targets). - targets <- either (reportTargetProblems verbosity) return + targets <- either (reportBuildTargetProblems verbosity) return $ resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors @@ -160,11 +140,8 @@ runProjectPostBuildPhase verbosity baseCtx buildCtx buildOutcomes where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags -- | This defines what a 'TargetSelector' means for the @bench@ command. -- It selects the 'AvailableTarget's that the 'TargetSelector' refers to, @@ -175,7 +152,7 @@ -- components -- selectPackageTargets :: TargetSelector - -> [AvailableTarget k] -> Either TargetProblem [k] + -> [AvailableTarget k] -> Either TargetProblem' [k] selectPackageTargets targetSelector targets -- If there are any buildable targets then we select those @@ -208,36 +185,12 @@ -- For the @build@ command we just need the basic checks on being buildable etc. -- selectComponentTarget :: SubComponentTarget - -> AvailableTarget k -> Either TargetProblem k -selectComponentTarget subtarget = - either (Left . TargetProblemCommon) Right - . selectComponentTargetBasic subtarget - - --- | The various error conditions that can occur when matching a --- 'TargetSelector' against 'AvailableTarget's for the @build@ command. --- -data TargetProblem = - TargetProblemCommon TargetProblemCommon - - -- | The 'TargetSelector' matches targets but none are buildable - | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] - - -- | There are no targets at all - | TargetProblemNoTargets TargetSelector - deriving (Eq, Show) - -reportTargetProblems :: Verbosity -> [TargetProblem] -> IO a -reportTargetProblems verbosity = - die' verbosity . unlines . map renderTargetProblem - -renderTargetProblem :: TargetProblem -> String -renderTargetProblem (TargetProblemCommon problem) = - renderTargetProblemCommon "build" problem -renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) = - renderTargetProblemNoneEnabled "build" targetSelector targets -renderTargetProblem(TargetProblemNoTargets targetSelector) = - renderTargetProblemNoTargets "build" targetSelector + -> AvailableTarget k -> Either TargetProblem' k +selectComponentTarget = selectComponentTargetBasic + +reportBuildTargetProblems :: Verbosity -> [TargetProblem'] -> IO a +reportBuildTargetProblems verbosity problems = + reportTargetProblems verbosity "build" problems reportCannotPruneDependencies :: Verbosity -> CannotPruneDependencies -> IO a reportCannotPruneDependencies verbosity = diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdClean.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdClean.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdClean.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdClean.hs 2020-05-29 20:33:21.000000000 +0000 @@ -20,12 +20,8 @@ import Distribution.Simple.Utils ( info, die', wrapText, handleDoesNotExist ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) -import Control.Monad - ( mapM_ ) -import Control.Exception - ( throwIO ) import System.Directory ( removeDirectoryRecursive, removeFile , doesDirectoryExist, getDirectoryContents ) @@ -111,5 +107,5 @@ removeEnvFiles :: FilePath -> IO () removeEnvFiles dir = - (mapM_ (removeFile . (dir )) . filter ((".ghc.environment" ==) . take 16)) + (traverse_ (removeFile . (dir )) . filter ((".ghc.environment" ==) . take 16)) =<< getDirectoryContents dir diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdConfigure.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdConfigure.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdConfigure.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdConfigure.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,3 +1,4 @@ +{-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: configure -- module Distribution.Client.CmdConfigure ( @@ -5,31 +6,32 @@ configureAction, ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import System.Directory -import Control.Monad import qualified Data.Map as Map import Distribution.Client.ProjectOrchestration import Distribution.Client.ProjectConfig ( writeProjectLocalExtraConfig ) +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags ) -import Distribution.Simple.Setup - ( HaddockFlags, TestFlags, BenchmarkFlags, fromFlagOrDefault ) + ( GlobalFlags, ConfigFlags(..) ) +import Distribution.Simple.Flag + ( fromFlagOrDefault ) import Distribution.Verbosity ( normal ) import Distribution.Simple.Command - ( CommandUI(..), usageAlternatives ) + ( CommandUI(..), usageAlternatives, optionName ) import Distribution.Simple.Utils ( wrapText, notice ) -import qualified Distribution.Client.Setup as Client -configureCommand :: CommandUI ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - ) -configureCommand = Client.installCommand { +configureCommand :: CommandUI (NixStyleFlags ()) +configureCommand = CommandUI { commandName = "v2-configure", commandSynopsis = "Add extra project configuration", commandUsage = usageAlternatives "v2-configure" [ "[FLAGS]" ], @@ -67,7 +69,10 @@ ++ " project configuration works.\n\n" ++ cmdCommonHelpTextNewBuildBeta - } + , commandDefaultFlags = defaultNixStyleFlags () + , commandOptions = filter (\o -> optionName o /= "ignore-project") + . nixStyleOptions (const []) + } -- | To a first approximation, the @configure@ just runs the first phase of -- the @build@ command where we bring the install plan up to date (thus @@ -79,12 +84,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -configureAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags ) - -> [String] -> GlobalFlags -> IO () -configureAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags ) - _extraArgs globalFlags = do +configureAction :: NixStyleFlags () -> [String] -> GlobalFlags -> IO () +configureAction flags@NixStyleFlags {..} _extraArgs globalFlags = do --TODO: deal with _extraArgs, since flags with wrong syntax end up there baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand @@ -122,9 +123,6 @@ printPlan verbosity baseCtx' buildCtx where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdErrorMessages.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdErrorMessages.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdErrorMessages.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdErrorMessages.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,4 +1,7 @@ -{-# LANGUAGE RecordWildCards, NamedFieldPuns #-} +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} + -- | Utilities to help format error messages for the various CLI commands. -- @@ -10,23 +13,29 @@ import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Client.ProjectOrchestration +import Distribution.Client.ProjectPlanning + ( AvailableTarget(..), AvailableTargetStatus(..), + CannotPruneDependencies(..), TargetRequested(..) ) +import Distribution.Client.TargetSelector + ( SubComponentTarget(..) ) +import Distribution.Client.TargetProblem + ( TargetProblem(..), TargetProblem' ) import Distribution.Client.TargetSelector - ( ComponentKindFilter, componentKind, showTargetSelector ) + ( ComponentKind(..), ComponentKindFilter, TargetSelector(..), + componentKind, showTargetSelector ) import Distribution.Package - ( packageId, PackageName, packageName ) + ( PackageId, packageId, PackageName, packageName ) +import Distribution.Simple.Utils + ( die' ) import Distribution.Types.ComponentName - ( showComponentName ) + ( ComponentName(..), showComponentName ) import Distribution.Types.LibraryName ( LibraryName(..) ) import Distribution.Solver.Types.OptionalStanza ( OptionalStanza(..) ) -import Distribution.Pretty - ( prettyShow ) import qualified Data.List.NonEmpty as NE -import Data.Function (on) ----------------------- @@ -192,22 +201,38 @@ ------------------------------------------------------- --- Renderering error messages for TargetProblemCommon +-- Renderering error messages for TargetProblem -- -renderTargetProblemCommon :: String -> TargetProblemCommon -> String -renderTargetProblemCommon verb (TargetNotInProject pkgname) = +-- | Default implementation of 'reportTargetProblems' simply renders one problem per line. +reportTargetProblems :: Verbosity -> String -> [TargetProblem'] -> IO a +reportTargetProblems verbosity verb = + die' verbosity . unlines . map (renderTargetProblem verb absurd) + +-- | Default implementation of 'renderTargetProblem'. +renderTargetProblem + :: String -- ^ verb + -> (a -> String) -- ^ how to render custom problems + -> TargetProblem a + -> String +renderTargetProblem _verb f (CustomTargetProblem x) = f x +renderTargetProblem verb _ (TargetProblemNoneEnabled targetSelector targets) = + renderTargetProblemNoneEnabled verb targetSelector targets +renderTargetProblem verb _ (TargetProblemNoTargets targetSelector) = + renderTargetProblemNoTargets verb targetSelector + +renderTargetProblem verb _ (TargetNotInProject pkgname) = "Cannot " ++ verb ++ " the package " ++ prettyShow pkgname ++ ", it is not " ++ "in this project (either directly or indirectly). If you want to add it " ++ "to the project then edit the cabal.project file." -renderTargetProblemCommon verb (TargetAvailableInIndex pkgname) = +renderTargetProblem verb _ (TargetAvailableInIndex pkgname) = "Cannot " ++ verb ++ " the package " ++ prettyShow pkgname ++ ", it is not " ++ "in this project (either directly or indirectly), but it is in the current " ++ "package index. If you want to add it to the project then edit the " ++ "cabal.project file." -renderTargetProblemCommon verb (TargetComponentNotProjectLocal pkgid cname _) = +renderTargetProblem verb _ (TargetComponentNotProjectLocal pkgid cname _) = "Cannot " ++ verb ++ " the " ++ showComponentName cname ++ " because the " ++ "package " ++ prettyShow pkgid ++ " is not local to the project, and cabal " ++ "does not currently support building test suites or benchmarks of " @@ -215,7 +240,7 @@ ++ "dependencies you can unpack the package locally and adjust the " ++ "cabal.project file to include that package directory." -renderTargetProblemCommon verb (TargetComponentNotBuildable pkgid cname _) = +renderTargetProblem verb _ (TargetComponentNotBuildable pkgid cname _) = "Cannot " ++ verb ++ " the " ++ showComponentName cname ++ " because it is " ++ "marked as 'buildable: False' within the '" ++ prettyShow (packageName pkgid) ++ ".cabal' file (at least for the current configuration). If you believe it " @@ -224,7 +249,7 @@ ++ "edit the .cabal file to declare it as buildable and fix any resulting " ++ "build problems." -renderTargetProblemCommon verb (TargetOptionalStanzaDisabledByUser _ cname _) = +renderTargetProblem verb _ (TargetOptionalStanzaDisabledByUser _ cname _) = "Cannot " ++ verb ++ " the " ++ showComponentName cname ++ " because " ++ "building " ++ compkinds ++ " has been explicitly disabled in the " ++ "configuration. You can adjust this configuration in the " @@ -237,7 +262,7 @@ where compkinds = renderComponentKind Plural (componentKind cname) -renderTargetProblemCommon verb (TargetOptionalStanzaDisabledBySolver pkgid cname _) = +renderTargetProblem verb _ (TargetOptionalStanzaDisabledBySolver pkgid cname _) = "Cannot " ++ verb ++ " the " ++ showComponentName cname ++ " because the " ++ "solver did not find a plan that included the " ++ compkinds ++ " for " ++ prettyShow pkgid ++ ". It is probably worth trying again with " @@ -250,7 +275,7 @@ where compkinds = renderComponentKind Plural (componentKind cname) -renderTargetProblemCommon verb (TargetProblemUnknownComponent pkgname ecname) = +renderTargetProblem verb _ (TargetProblemUnknownComponent pkgname ecname) = "Cannot " ++ verb ++ " the " ++ (case ecname of Left ucname -> "component " ++ prettyShow ucname @@ -262,13 +287,13 @@ Right cname -> renderComponentKind Singular (componentKind cname)) ++ " with that name." -renderTargetProblemCommon verb (TargetProblemNoSuchPackage pkgid) = +renderTargetProblem verb _ (TargetProblemNoSuchPackage pkgid) = "Internal error when trying to " ++ verb ++ " the package " ++ prettyShow pkgid ++ ". The package is not in the set of available targets " ++ "for the project plan, which would suggest an inconsistency " ++ "between readTargetSelectors and resolveTargets." -renderTargetProblemCommon verb (TargetProblemNoSuchComponent pkgid cname) = +renderTargetProblem verb _ (TargetProblemNoSuchComponent pkgid cname) = "Internal error when trying to " ++ verb ++ " the " ++ showComponentName cname ++ " from the package " ++ prettyShow pkgid ++ ". The package,component pair is not in the set of available targets " diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdExec.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdExec.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdExec.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdExec.hs 2020-05-29 20:33:21.000000000 +0000 @@ -21,13 +21,12 @@ ( GenericPlanPackage(..) , toGraph ) +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( ConfigExFlags - , ConfigFlags(configVerbosity) + ( ConfigFlags(configVerbosity) , GlobalFlags - , InstallFlags ) -import qualified Distribution.Client.Setup as Client import Distribution.Client.ProjectOrchestration ( ProjectBuildContext(..) , runProjectPreBuildPhase @@ -49,7 +48,7 @@ , ElaboratedSharedConfig(..) ) import Distribution.Simple.Command - ( CommandUI(..) + ( CommandUI(..), optionName ) import Distribution.Simple.Program.Db ( modifyProgramSearchPath @@ -73,11 +72,8 @@ import Distribution.Simple.GHC ( getImplInfo , GhcImplInfo(supportsPkgEnvFiles) ) -import Distribution.Simple.Setup - ( HaddockFlags - , TestFlags - , BenchmarkFlags - , fromFlagOrDefault +import Distribution.Simple.Flag + ( fromFlagOrDefault ) import Distribution.Simple.Utils ( die' @@ -87,8 +83,7 @@ , wrapText ) import Distribution.Verbosity - ( Verbosity - , normal + ( normal ) import Prelude () @@ -97,9 +92,7 @@ import qualified Data.Set as S import qualified Data.Map as M -execCommand :: CommandUI ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - ) +execCommand :: CommandUI (NixStyleFlags ()) execCommand = CommandUI { commandName = "v2-exec" , commandSynopsis = "Give a command access to the store." @@ -120,16 +113,13 @@ ++ " to choose an appropriate version of ghc and to include any" ++ " ghc-specific flags requested." , commandNotes = Nothing - , commandOptions = commandOptions Client.installCommand - , commandDefaultFlags = commandDefaultFlags Client.installCommand + , commandOptions = filter (\o -> optionName o /= "ignore-project") + . nixStyleOptions (const []) + , commandDefaultFlags = defaultNixStyleFlags () } -execAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags ) - -> [String] -> GlobalFlags -> IO () -execAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags ) - extraArgs globalFlags = do +execAction :: NixStyleFlags () -> [String] -> GlobalFlags -> IO () +execAction flags@NixStyleFlags {..} extraArgs globalFlags = do baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand @@ -198,11 +188,8 @@ runProgramInvocation verbosity invocation where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags withOverrides env args program = program { programOverrideEnv = programOverrideEnv program ++ env , programDefaultArgs = programDefaultArgs program ++ args} diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdFreeze.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdFreeze.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdFreeze.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdFreeze.hs 2020-05-29 20:33:21.000000000 +0000 @@ -7,6 +7,11 @@ freezeAction, ) where +import Distribution.Client.Compat.Prelude +import Prelude () + +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.ProjectOrchestration import Distribution.Client.ProjectPlanning import Distribution.Client.ProjectConfig @@ -32,9 +37,9 @@ import Distribution.PackageDescription ( FlagAssignment, nullFlagAssignment ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags ) -import Distribution.Simple.Setup - ( HaddockFlags, TestFlags, BenchmarkFlags, fromFlagOrDefault ) + ( GlobalFlags, ConfigFlags(..) ) +import Distribution.Simple.Flag + ( fromFlagOrDefault ) import Distribution.Simple.Flag (Flag (..)) import Distribution.Simple.Utils ( die', notice, wrapText ) @@ -42,18 +47,12 @@ ( normal ) import qualified Data.Map as Map -import Data.Map (Map) -import Control.Monad (unless) import Distribution.Simple.Command ( CommandUI(..), usageAlternatives ) -import qualified Distribution.Client.Setup as Client - -freezeCommand :: CommandUI ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - ) -freezeCommand = Client.installCommand { +freezeCommand :: CommandUI (NixStyleFlags ()) +freezeCommand = CommandUI { commandName = "v2-freeze", commandSynopsis = "Freeze dependencies.", commandUsage = usageAlternatives "v2-freeze" [ "[FLAGS]" ], @@ -93,6 +92,8 @@ ++ "https://github.com/haskell/cabal/issues and if you\nhave any time " ++ "to get involved and help with testing, fixing bugs etc then\nthat " ++ "is very much appreciated.\n" + , commandDefaultFlags = defaultNixStyleFlags () + , commandOptions = nixStyleOptions (const []) } -- | To a first approximation, the @freeze@ command runs the first phase of @@ -102,12 +103,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -freezeAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags ) - -> [String] -> GlobalFlags -> IO () -freezeAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags ) - extraArgs globalFlags = do +freezeAction :: NixStyleFlags () -> [String] -> GlobalFlags -> IO () +freezeAction flags@NixStyleFlags {..} extraArgs globalFlags = do unless (null extraArgs) $ die' verbosity $ "'freeze' doesn't take any extra arguments: " @@ -133,11 +130,8 @@ where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdHaddock.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdHaddock.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdHaddock.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdHaddock.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,4 +1,4 @@ -{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: haddock -- @@ -8,30 +8,30 @@ haddockAction, -- * Internals exposed for testing - TargetProblem(..), selectPackageTargets, selectComponentTarget ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.ProjectOrchestration import Distribution.Client.CmdErrorMessages - +import Distribution.Client.TargetProblem + ( TargetProblem (..), TargetProblem' ) import Distribution.Client.NixStyleOptions - ( NixStyleFlags, nixStyleOptions, defaultNixStyleFlags ) + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags ) + ( GlobalFlags, ConfigFlags(..) ) import Distribution.Simple.Setup - ( HaddockFlags(..), TestFlags, BenchmarkFlags(..), fromFlagOrDefault ) + ( HaddockFlags(..), fromFlagOrDefault ) import Distribution.Simple.Command ( CommandUI(..), usageAlternatives ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import Distribution.Simple.Utils ( wrapText, die' ) -import Control.Monad (when) - - haddockCommand :: CommandUI (NixStyleFlags ()) haddockCommand = CommandUI { commandName = "v2-haddock", @@ -71,13 +71,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -haddockAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags, () ) - -> [String] -> GlobalFlags -> IO () -haddockAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags, () ) - targetStrings globalFlags = do - +haddockAction :: NixStyleFlags () -> [String] -> GlobalFlags -> IO () +haddockAction flags@NixStyleFlags {..} targetStrings globalFlags = do baseCtx <- establishProjectBaseContext verbosity cliConfig HaddockCommand targetSelectors <- either (reportTargetSelectorProblems verbosity) return @@ -92,11 +87,10 @@ -- When we interpret the targets on the command line, interpret them as -- haddock targets - targets <- either (reportTargetProblems verbosity) return + targets <- either (reportBuildDocumentationTargetProblems verbosity) return $ resolveTargets (selectPackageTargets haddockFlags) selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors @@ -113,11 +107,7 @@ runProjectPostBuildPhase verbosity baseCtx buildCtx buildOutcomes where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags - mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here -- | This defines what a 'TargetSelector' means for the @haddock@ command. -- It selects the 'AvailableTarget's that the 'TargetSelector' refers to, @@ -128,7 +118,7 @@ -- We do similarly for test-suites, benchmarks and foreign libs. -- selectPackageTargets :: HaddockFlags -> TargetSelector - -> [AvailableTarget k] -> Either TargetProblem [k] + -> [AvailableTarget k] -> Either TargetProblem' [k] selectPackageTargets haddockFlags targetSelector targets -- If there are any buildable targets then we select those @@ -178,35 +168,9 @@ -- etc. -- selectComponentTarget :: SubComponentTarget - -> AvailableTarget k -> Either TargetProblem k -selectComponentTarget subtarget = - either (Left . TargetProblemCommon) Right - . selectComponentTargetBasic subtarget - - --- | The various error conditions that can occur when matching a --- 'TargetSelector' against 'AvailableTarget's for the @haddock@ command. --- -data TargetProblem = - TargetProblemCommon TargetProblemCommon - - -- | The 'TargetSelector' matches targets but none are buildable - | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] - - -- | There are no targets at all - | TargetProblemNoTargets TargetSelector - deriving (Eq, Show) - -reportTargetProblems :: Verbosity -> [TargetProblem] -> IO a -reportTargetProblems verbosity = - die' verbosity . unlines . map renderTargetProblem - -renderTargetProblem :: TargetProblem -> String -renderTargetProblem (TargetProblemCommon problem) = - renderTargetProblemCommon "build documentation for" problem - -renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) = - renderTargetProblemNoneEnabled "build documentation for" targetSelector targets + -> AvailableTarget k -> Either TargetProblem' k +selectComponentTarget = selectComponentTargetBasic -renderTargetProblem(TargetProblemNoTargets targetSelector) = - renderTargetProblemNoTargets "build documentation for" targetSelector +reportBuildDocumentationTargetProblems :: Verbosity -> [TargetProblem'] -> IO a +reportBuildDocumentationTargetProblems verbosity problems = + reportTargetProblems verbosity "build documentation for" problems diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallFlags.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallFlags.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallFlags.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallFlags.hs 2020-05-29 20:33:21.000000000 +0000 @@ -8,28 +8,24 @@ ) where import Distribution.Client.Compat.Prelude +import Prelude () import Distribution.ReadE - ( ReadE(..), succeedReadE ) + ( succeedReadE, parsecToReadE ) import Distribution.Simple.Command ( ShowOrParseArgs(..), OptionField(..), option, reqArg ) import Distribution.Simple.Setup ( Flag(..), trueArg, flagToList, toFlag ) -import Distribution.Client.InstallSymlink +import Distribution.Client.Types.InstallMethod + ( InstallMethod (..) ) +import Distribution.Client.Types.OverwritePolicy ( OverwritePolicy(..) ) - -data InstallMethod = InstallMethodCopy - | InstallMethodSymlink - deriving (Eq, Show, Generic, Bounded, Enum) - -instance Binary InstallMethod -instance Structured InstallMethod +import qualified Distribution.Compat.CharParsing as P data ClientInstallFlags = ClientInstallFlags { cinstInstallLibs :: Flag Bool - , cinstIgnoreProject :: Flag Bool , cinstEnvironmentPath :: Flag FilePath , cinstOverwritePolicy :: Flag OverwritePolicy , cinstInstallMethod :: Flag InstallMethod @@ -49,7 +45,6 @@ defaultClientInstallFlags :: ClientInstallFlags defaultClientInstallFlags = ClientInstallFlags { cinstInstallLibs = toFlag False - , cinstIgnoreProject = toFlag False , cinstEnvironmentPath = mempty , cinstOverwritePolicy = mempty , cinstInstallMethod = mempty @@ -62,10 +57,6 @@ "Install libraries rather than executables from the target package." cinstInstallLibs (\v flags -> flags { cinstInstallLibs = v }) trueArg - , option "z" ["ignore-project"] - "Ignore local project configuration" - cinstIgnoreProject (\v flags -> flags { cinstIgnoreProject = v }) - trueArg , option [] ["package-env", "env"] "Set the environment file that may be modified." cinstEnvironmentPath (\pf flags -> flags { cinstEnvironmentPath = pf }) @@ -73,42 +64,26 @@ , option [] ["overwrite-policy"] "How to handle already existing symlinks." cinstOverwritePolicy (\v flags -> flags { cinstOverwritePolicy = v }) - $ reqArg - "always|never" - readOverwritePolicyFlag - showOverwritePolicyFlag + $ reqArg "always|never" + (parsecToReadE (\err -> "Error parsing overwrite-policy: " ++ err) (toFlag `fmap` parsec)) + (map prettyShow . flagToList) , option [] ["install-method"] "How to install the executables." cinstInstallMethod (\v flags -> flags { cinstInstallMethod = v }) $ reqArg "default|copy|symlink" - readInstallMethodFlag - showInstallMethodFlag + (parsecToReadE (\err -> "Error parsing install-method: " ++ err) (toFlag `fmap` parsecInstallMethod)) + (map prettyShow . flagToList) , option [] ["installdir"] "Where to install (by symlinking or copying) the executables in." cinstInstalldir (\v flags -> flags { cinstInstalldir = v }) $ reqArg "DIR" (succeedReadE Flag) flagToList ] -readOverwritePolicyFlag :: ReadE (Flag OverwritePolicy) -readOverwritePolicyFlag = ReadE $ \case - "always" -> Right $ Flag AlwaysOverwrite - "never" -> Right $ Flag NeverOverwrite - policy -> Left $ "'" <> policy <> "' isn't a valid overwrite policy" - -showOverwritePolicyFlag :: Flag OverwritePolicy -> [String] -showOverwritePolicyFlag (Flag AlwaysOverwrite) = ["always"] -showOverwritePolicyFlag (Flag NeverOverwrite) = ["never"] -showOverwritePolicyFlag NoFlag = [] - -readInstallMethodFlag :: ReadE (Flag InstallMethod) -readInstallMethodFlag = ReadE $ \case - "default" -> Right $ NoFlag - "copy" -> Right $ Flag InstallMethodCopy - "symlink" -> Right $ Flag InstallMethodSymlink - method -> Left $ "'" <> method <> "' isn't a valid install-method" - -showInstallMethodFlag :: Flag InstallMethod -> [String] -showInstallMethodFlag (Flag InstallMethodCopy) = ["copy"] -showInstallMethodFlag (Flag InstallMethodSymlink) = ["symlink"] -showInstallMethodFlag NoFlag = [] +parsecInstallMethod :: CabalParsing m => m InstallMethod +parsecInstallMethod = do + name <- P.munch1 isAlpha + case name of + "copy" -> pure InstallMethodCopy + "symlink" -> pure InstallMethodSymlink + _ -> P.unexpected $ "InstallMethod: " ++ name diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs 2020-05-29 20:33:21.000000000 +0000 @@ -15,11 +15,9 @@ import Distribution.Client.Types import Distribution.Compat.CharParsing (char, optional) import Distribution.Package -import Distribution.Parsec import Distribution.Simple.LocalBuildInfo (ComponentName (CExeName)) import Distribution.Simple.Utils (die') import Distribution.Solver.Types.PackageConstraint (PackageProperty (..)) -import Distribution.Verbosity (Verbosity) import Distribution.Version data WithoutProjectTargetSelector @@ -36,7 +34,7 @@ Just uri -> return (WoURI uri) Nothing -> die' verbosity $ "Invalid package ID: " ++ input ++ "\n" ++ err where - parser :: ParsecParser WithoutProjectTargetSelector + parser :: CabalParsing m => m WithoutProjectTargetSelector parser = do pid <- parsec cn <- optional (char ':' *> parsec) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdInstall.hs 2020-05-29 20:33:21.000000000 +0000 @@ -12,7 +12,6 @@ installAction, -- * Internals exposed for testing - TargetProblem(..), selectPackageTargets, selectComponentTarget, -- * Internals exposed for CmdRepl + CmdRun @@ -28,12 +27,14 @@ import Distribution.Client.ProjectOrchestration import Distribution.Client.CmdErrorMessages import Distribution.Client.CmdSdist +import Distribution.Client.TargetProblem + ( TargetProblem', TargetProblem (..) ) import Distribution.Client.CmdInstall.ClientInstallFlags import Distribution.Client.CmdInstall.ClientInstallTargetSelector import Distribution.Client.Setup - ( GlobalFlags(..), ConfigFlags(..), ConfigExFlags, InstallFlags(..) ) + ( GlobalFlags(..), ConfigFlags(..) ) import Distribution.Client.Types ( PackageSpecifier(..), PackageLocation(..), UnresolvedSourcePackage , SourcePackageDb(..) ) @@ -47,7 +48,8 @@ , fetchAndReadSourcePackages ) import Distribution.Client.NixStyleOptions - ( NixStyleFlags, nixStyleOptions, defaultNixStyleFlags ) + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) +import Distribution.Client.ProjectFlags (ProjectFlags (..)) import Distribution.Client.ProjectConfig.Types ( ProjectConfig(..), ProjectConfigShared(..) , ProjectConfigBuildOnly(..), PackageConfig(..) @@ -78,7 +80,7 @@ ( getSourcePackages, getInstalledPackages ) import Distribution.Client.ProjectConfig ( projectConfigWithBuilderRepoContext - , resolveBuildTimeSettings, withProjectOrGlobalConfigIgn ) + , resolveBuildTimeSettings, withProjectOrGlobalConfig ) import Distribution.Client.ProjectPlanning ( storePackageInstallDirs' ) import Distribution.Client.ProjectPlanning.Types @@ -91,11 +93,13 @@ import Distribution.Client.RebuildMonad ( runRebuild ) import Distribution.Client.InstallSymlink - ( OverwritePolicy(..), symlinkBinary, trySymlink ) + ( symlinkBinary, trySymlink ) +import Distribution.Client.Types.OverwritePolicy + ( OverwritePolicy (..) ) import Distribution.Simple.Flag ( fromFlagOrDefault, flagToMaybe, flagElim ) import Distribution.Simple.Setup - ( Flag(..), HaddockFlags, TestFlags, BenchmarkFlags ) + ( Flag(..) ) import Distribution.Solver.Types.SourcePackage ( SourcePackage(..) ) import Distribution.Simple.Command @@ -117,27 +121,17 @@ import Distribution.Types.UnqualComponentName ( UnqualComponentName, unUnqualComponentName ) import Distribution.Verbosity - ( Verbosity, normal, lessVerbose ) + ( normal, lessVerbose ) import Distribution.Simple.Utils ( wrapText, die', notice, warn , withTempDirectory, createDirectoryIfMissingVerbose , ordNub ) import Distribution.Utils.Generic ( safeHead, writeFileAtomic ) -import Distribution.Parsec - ( simpleParsec ) -import Distribution.Pretty - ( prettyShow ) - -import Control.Exception - ( catch ) -import Control.Monad - ( mapM, forM_ ) + import qualified Data.ByteString.Lazy.Char8 as BS -import Data.Either - ( partitionEithers ) import Data.Ord - ( comparing, Down(..) ) + ( Down(..) ) import qualified Data.Map as Map import Distribution.Utils.NubList ( fromNubList ) @@ -197,16 +191,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -installAction - :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - , ClientInstallFlags) - -> [String] -> GlobalFlags - -> IO () -installAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags - , clientInstallFlags' ) - targetStrings globalFlags = do +installAction :: NixStyleFlags ClientInstallFlags -> [String] -> GlobalFlags -> IO () +installAction flags@NixStyleFlags { extraFlags = clientInstallFlags', .. } targetStrings globalFlags = do -- Ensure there were no invalid configuration options specified. verifyPreconditionsOrDie verbosity configFlags' @@ -268,7 +254,7 @@ withoutProject :: ProjectConfig -> IO ([PackageSpecifier pkg], [URI], [TargetSelector], ProjectConfig) withoutProject globalConfig = do - tss <- mapM (parseWithoutProjectTargetSelector verbosity) targetStrings' + tss <- traverse (parseWithoutProjectTargetSelector verbosity) targetStrings' cabalDir <- getCabalDir let @@ -312,11 +298,8 @@ return (packageSpecifiers, uris, packageTargets, projectConfig) - let - ignoreProject = fromFlagOrDefault False (cinstIgnoreProject clientInstallFlags) - (specs, uris, targetSelectors, config) <- - withProjectOrGlobalConfigIgn ignoreProject verbosity globalConfigFlag withProject withoutProject + withProjectOrGlobalConfig verbosity ignoreProject globalConfigFlag withProject withoutProject let ProjectConfig { @@ -411,10 +394,11 @@ where configFlags' = disableTestsBenchsByDefault configFlags verbosity = fromFlagOrDefault normal (configVerbosity configFlags') + ignoreProject = flagIgnoreProject projectFlags cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags' configExFlags - installFlags clientInstallFlags' - haddockFlags testFlags benchmarkFlags + globalFlags + flags { configFlags = configFlags' } + clientInstallFlags' globalConfigFlag = projectConfigConfigFile (projectConfigShared cliConfig) -- | Verify that invalid config options were not passed to the install command. @@ -485,7 +469,7 @@ createDirectoryIfMissing True (distSdistDirectory localDistDirLayout) - unless (Map.null targets) $ forM_ (localPackages localBaseCtx) $ \lpkg -> case lpkg of + unless (Map.null targets) $ for_ (localPackages localBaseCtx) $ \lpkg -> case lpkg of SpecificSourcePackage pkg -> packageToSdist verbosity (distProjectRootDirectory localDistDirLayout) TarGzArchive (distSdistFile localDistDirLayout (packageId pkg)) pkg @@ -506,7 +490,6 @@ let mTargets = resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan (Just pkgDb) targetSelectors @@ -518,12 +501,12 @@ -- Not everything is local. let (errs', hackageNames) = partitionEithers . flip fmap errs $ \case - TargetProblemCommon (TargetAvailableInIndex name) -> Right name - err -> Left err + TargetAvailableInIndex name -> Right name + err -> Left err -- report incorrect case for known package. for_ errs' $ \case - TargetProblemCommon (TargetNotInProject hn) -> + TargetNotInProject hn -> case searchByName (packageIndex pkgDb) (unPackageName hn) of [] -> return () xs -> die' verbosity . concat $ @@ -533,7 +516,7 @@ ] _ -> return () - when (not . null $ errs') $ reportTargetProblems verbosity errs' + when (not . null $ errs') $ reportBuildTargetProblems verbosity errs' let targetSelectors' = flip filter targetSelectors $ \case @@ -546,11 +529,10 @@ -- This can't fail, because all of the errors are -- removed (or we've given up). targets <- - either (reportTargetProblems verbosity) return $ + either (reportBuildTargetProblems verbosity) return $ resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors' @@ -568,11 +550,10 @@ constructProjectBuildContext verbosity baseCtx targetSelectors = do runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do -- Interpret the targets on the command line as build targets - targets <- either (reportTargetProblems verbosity) return $ + targets <- either (reportBuildTargetProblems verbosity) return $ resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors @@ -931,7 +912,7 @@ -- selectPackageTargets :: TargetSelector - -> [AvailableTarget k] -> Either TargetProblem [k] + -> [AvailableTarget k] -> Either TargetProblem' [k] selectPackageTargets targetSelector targets -- If there are any buildable targets then we select those @@ -965,36 +946,11 @@ -- selectComponentTarget :: SubComponentTarget - -> AvailableTarget k -> Either TargetProblem k -selectComponentTarget subtarget = - either (Left . TargetProblemCommon) Right - . selectComponentTargetBasic subtarget - - --- | The various error conditions that can occur when matching a --- 'TargetSelector' against 'AvailableTarget's for the @build@ command. --- -data TargetProblem = - TargetProblemCommon TargetProblemCommon - - -- | The 'TargetSelector' matches targets but none are buildable - | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] + -> AvailableTarget k -> Either TargetProblem' k +selectComponentTarget = selectComponentTargetBasic - -- | There are no targets at all - | TargetProblemNoTargets TargetSelector - deriving (Eq, Show) - -reportTargetProblems :: Verbosity -> [TargetProblem] -> IO a -reportTargetProblems verbosity = - die' verbosity . unlines . map renderTargetProblem - -renderTargetProblem :: TargetProblem -> String -renderTargetProblem (TargetProblemCommon problem) = - renderTargetProblemCommon "build" problem -renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) = - renderTargetProblemNoneEnabled "build" targetSelector targets -renderTargetProblem(TargetProblemNoTargets targetSelector) = - renderTargetProblemNoTargets "build" targetSelector +reportBuildTargetProblems :: Verbosity -> [TargetProblem'] -> IO a +reportBuildTargetProblems verbosity problems = reportTargetProblems verbosity "build" problems reportCannotPruneDependencies :: Verbosity -> CannotPruneDependencies -> IO a reportCannotPruneDependencies verbosity = diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdLegacy.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdLegacy.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdLegacy.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdLegacy.hs 2020-05-29 20:33:21.000000000 +0000 @@ -17,10 +17,10 @@ import Distribution.Simple.Utils ( wrapText ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import Control.Exception - ( SomeException(..), try ) + ( try ) import qualified Data.Text as T -- Tweaked versions of code from Main. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdRepl.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdRepl.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdRepl.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdRepl.hs 2020-05-29 20:33:21.000000000 +0000 @@ -12,7 +12,7 @@ replAction, -- * Internals exposed for testing - TargetProblem(..), + matchesMultipleProblem, selectPackageTargets, selectComponentTarget ) where @@ -24,13 +24,20 @@ import qualified Distribution.Types.Lens as L import Distribution.Client.NixStyleOptions - ( NixStyleFlags, nixStyleOptions, defaultNixStyleFlags ) + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.CmdErrorMessages + ( renderTargetSelector, showTargetSelector, + renderTargetProblem, + targetSelectorRefersToPkgs, + renderComponentKind, renderListCommaAnd, renderListSemiAnd, + componentKind, sortGroupOn, Plural(..) ) +import Distribution.Client.TargetProblem + ( TargetProblem(..) ) import qualified Distribution.Client.InstallPlan as InstallPlan import Distribution.Client.ProjectBuilding ( rebuildTargetsDryRun, improveInstallPlanWithUpToDatePackages ) import Distribution.Client.ProjectConfig - ( ProjectConfig(..), withProjectOrGlobalConfigIgn + ( ProjectConfig(..), withProjectOrGlobalConfig , projectConfigConfigFile ) import Distribution.Client.ProjectOrchestration import Distribution.Client.ProjectPlanning @@ -38,13 +45,12 @@ import Distribution.Client.ProjectPlanning.Types ( elabOrderExeDependencies ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags ) + ( GlobalFlags, ConfigFlags(..) ) import qualified Distribution.Client.Setup as Client import Distribution.Client.Types ( PackageLocation(..), PackageSpecifier(..), UnresolvedSourcePackage ) import Distribution.Simple.Setup - ( HaddockFlags, TestFlags, BenchmarkFlags - , fromFlagOrDefault, replOptions + ( fromFlagOrDefault, replOptions , Flag(..), toFlag, trueArg, falseArg ) import Distribution.Simple.Command ( CommandUI(..), liftOptionL, usageAlternatives, option @@ -57,9 +63,7 @@ ( Package(..), packageName, UnitId, installedUnitId ) import Distribution.PackageDescription.PrettyPrint import Distribution.Parsec - ( Parsec(..), parsecCommaList ) -import Distribution.Pretty - ( prettyShow ) + ( parsecCommaList ) import Distribution.ReadE ( ReadE, parsecToReadE ) import qualified Distribution.SPDX.License as SPDX @@ -88,7 +92,7 @@ import Distribution.Utils.Generic ( safeHead ) import Distribution.Verbosity - ( Verbosity, normal, lessVerbose ) + ( normal, lessVerbose ) import Distribution.Simple.Utils ( wrapText, die', debugNoWrap, ordNub, createTempDirectory, handleDoesNotExist ) import Language.Haskell.Extension @@ -197,21 +201,14 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -replAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - , (ReplFlags, EnvFlags) ) - -> [String] -> GlobalFlags -> IO () -replAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags - , (replFlags, envFlags) ) - targetStrings globalFlags = do +replAction :: NixStyleFlags (ReplFlags, EnvFlags) -> [String] -> GlobalFlags -> IO () +replAction flags@NixStyleFlags { extraFlags = (replFlags, envFlags), ..} targetStrings globalFlags = do let - ignoreProject = fromFlagOrDefault False (envIgnoreProject envFlags) with = withProject cliConfig verbosity targetStrings without config = withoutProject (config <> cliConfig) verbosity targetStrings (baseCtx, targetSelectors, finalizer, replType) <- - withProjectOrGlobalConfigIgn ignoreProject verbosity globalConfigFlag with without + withProjectOrGlobalConfig verbosity ignoreProject globalConfigFlag with without when (buildSettingOnlyDeps (buildSettings baseCtx)) $ die' verbosity $ "The repl command does not support '--only-dependencies'. " @@ -303,11 +300,8 @@ finalizer where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags - mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags + ignoreProject = envIgnoreProject envFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here globalConfigFlag = projectConfigConfigFile (projectConfigShared cliConfig) validatedTargets elaboratedPlan targetSelectors = do @@ -317,7 +311,6 @@ $ resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors @@ -327,7 +320,7 @@ -- same component, but not two that live in different components. when (Set.size (distinctTargetComponents targets) > 1) $ reportTargetProblems verbosity - [TargetProblemMultipleTargets targets] + [multipleTargetsProblem targets] return targets @@ -461,7 +454,7 @@ -- multiple libs or exes. -- selectPackageTargets :: TargetSelector - -> [AvailableTarget k] -> Either TargetProblem [k] + -> [AvailableTarget k] -> Either ReplTargetProblem [k] selectPackageTargets targetSelector targets -- If there is exactly one buildable library then we select that @@ -470,7 +463,7 @@ -- but fail if there are multiple buildable libraries. | not (null targetsLibsBuildable) - = Left (TargetProblemMatchesMultiple targetSelector targetsLibsBuildable') + = Left (matchesMultipleProblem targetSelector targetsLibsBuildable') -- If there is exactly one buildable executable then we select that | [target] <- targetsExesBuildable @@ -478,7 +471,7 @@ -- but fail if there are multiple buildable executables. | not (null targetsExesBuildable) - = Left (TargetProblemMatchesMultiple targetSelector targetsExesBuildable') + = Left (matchesMultipleProblem targetSelector targetsExesBuildable') -- If there is exactly one other target then we select that | [target] <- targetsBuildable @@ -486,7 +479,7 @@ -- but fail if there are multiple such targets | not (null targetsBuildable) - = Left (TargetProblemMatchesMultiple targetSelector targetsBuildable') + = Left (matchesMultipleProblem targetSelector targetsBuildable') -- If there are targets but none are buildable then we report those | not (null targets) @@ -523,40 +516,43 @@ -- For the @repl@ command we just need the basic checks on being buildable etc. -- selectComponentTarget :: SubComponentTarget - -> AvailableTarget k -> Either TargetProblem k -selectComponentTarget subtarget = - either (Left . TargetProblemCommon) Right - . selectComponentTargetBasic subtarget + -> AvailableTarget k -> Either ReplTargetProblem k +selectComponentTarget = selectComponentTargetBasic +data ReplProblem + = TargetProblemMatchesMultiple TargetSelector [AvailableTarget ()] + + -- | Multiple 'TargetSelector's match multiple targets + | TargetProblemMultipleTargets TargetsMap + deriving (Eq, Show) + -- | The various error conditions that can occur when matching a -- 'TargetSelector' against 'AvailableTarget's for the @repl@ command. -- -data TargetProblem = - TargetProblemCommon TargetProblemCommon - - -- | The 'TargetSelector' matches targets but none are buildable - | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] - - -- | There are no targets at all - | TargetProblemNoTargets TargetSelector +type ReplTargetProblem = TargetProblem ReplProblem - -- | A single 'TargetSelector' matches multiple targets - | TargetProblemMatchesMultiple TargetSelector [AvailableTarget ()] +matchesMultipleProblem + :: TargetSelector + -> [AvailableTarget ()] + -> ReplTargetProblem +matchesMultipleProblem targetSelector targetsExesBuildable = + CustomTargetProblem $ TargetProblemMatchesMultiple targetSelector targetsExesBuildable + +multipleTargetsProblem + :: TargetsMap + -> ReplTargetProblem +multipleTargetsProblem = CustomTargetProblem . TargetProblemMultipleTargets - -- | Multiple 'TargetSelector's match multiple targets - | TargetProblemMultipleTargets TargetsMap - deriving (Eq, Show) - -reportTargetProblems :: Verbosity -> [TargetProblem] -> IO a +reportTargetProblems :: Verbosity -> [TargetProblem ReplProblem] -> IO a reportTargetProblems verbosity = - die' verbosity . unlines . map renderTargetProblem + die' verbosity . unlines . map renderReplTargetProblem -renderTargetProblem :: TargetProblem -> String -renderTargetProblem (TargetProblemCommon problem) = - renderTargetProblemCommon "open a repl for" problem +renderReplTargetProblem :: TargetProblem ReplProblem -> String +renderReplTargetProblem = renderTargetProblem "open a repl for" renderReplProblem -renderTargetProblem (TargetProblemMatchesMultiple targetSelector targets) = +renderReplProblem :: ReplProblem -> String +renderReplProblem (TargetProblemMatchesMultiple targetSelector targets) = "Cannot open a repl for multiple components at once. The target '" ++ showTargetSelector targetSelector ++ "' refers to " ++ renderTargetSelector targetSelector ++ " which " @@ -576,7 +572,7 @@ availableTargetComponentKind = componentKind . availableTargetComponentName -renderTargetProblem (TargetProblemMultipleTargets selectorMap) = +renderReplProblem (TargetProblemMultipleTargets selectorMap) = "Cannot open a repl for multiple components at once. The targets " ++ renderListCommaAnd [ "'" ++ showTargetSelector ts ++ "'" @@ -584,13 +580,6 @@ ++ " refer to different components." ++ ".\n\n" ++ explanationSingleComponentLimitation -renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) = - renderTargetProblemNoneEnabled "open a repl for" targetSelector targets - -renderTargetProblem (TargetProblemNoTargets targetSelector) = - renderTargetProblemNoTargets "open a repl for" targetSelector - - explanationSingleComponentLimitation :: String explanationSingleComponentLimitation = "The reason for this limitation is that current versions of ghci do not " diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdRun.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdRun.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdRun.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdRun.hs 2020-05-29 20:33:21.000000000 +0000 @@ -12,7 +12,8 @@ handleShebang, validScript, -- * Internals exposed for testing - TargetProblem(..), + matchesMultipleProblem, + noExesProblem, selectPackageTargets, selectComponentTarget ) where @@ -22,32 +23,36 @@ import Distribution.Client.ProjectOrchestration import Distribution.Client.CmdErrorMessages + ( renderTargetSelector, showTargetSelector, + renderTargetProblem, + renderTargetProblemNoTargets, plural, targetSelectorPluralPkgs, + targetSelectorFilter, renderListCommaAnd ) +import Distribution.Client.TargetProblem + ( TargetProblem (..) ) import Distribution.Client.CmdRun.ClientRunFlags import Distribution.Client.NixStyleOptions - ( NixStyleFlags, nixStyleOptions, defaultNixStyleFlags ) + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( GlobalFlags(..), ConfigFlags(..), ConfigExFlags, InstallFlags(..) ) + ( GlobalFlags(..), ConfigFlags(..) ) import Distribution.Client.GlobalFlags ( defaultGlobalFlags ) -import Distribution.Simple.Setup - ( HaddockFlags, TestFlags, BenchmarkFlags, fromFlagOrDefault ) +import Distribution.Simple.Flag + ( fromFlagOrDefault ) import Distribution.Simple.Command ( CommandUI(..), usageAlternatives ) import Distribution.Types.ComponentName ( showComponentName ) -import Distribution.Pretty - ( prettyShow ) import Distribution.CabalSpecVersion (CabalSpecVersion (..), cabalSpecLatest) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import Distribution.Simple.Utils ( wrapText, warn, die', ordNub, info , createTempDirectory, handleDoesNotExist ) import Distribution.Client.ProjectConfig ( ProjectConfig(..), ProjectConfigShared(..) - , withProjectOrGlobalConfigIgn ) + , withProjectOrGlobalConfig ) import Distribution.Client.ProjectPlanning ( ElaboratedConfiguredPackage(..) , ElaboratedInstallPlan, binDirectoryFor ) @@ -153,14 +158,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -runAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - , ClientRunFlags ) - -> [String] -> GlobalFlags -> IO () -runAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags - , clientRunFlags ) - targetStrings globalFlags = do +runAction :: NixStyleFlags ClientRunFlags -> [String] -> GlobalFlags -> IO () +runAction flags@NixStyleFlags {extraFlags=clientRunFlags, ..} targetStrings globalFlags = do globalTmp <- getTemporaryDirectory tmpDir <- createTempDirectory globalTmp "cabal-repl." @@ -171,10 +170,7 @@ distDirLayout <- establishDummyDistDirLayout verbosity (config <> cliConfig) tmpDir establishDummyProjectBaseContext verbosity (config <> cliConfig) distDirLayout [] OtherCommand - let - ignoreProject = fromFlagOrDefault False (crunIgnoreProject clientRunFlags) - - baseCtx <- withProjectOrGlobalConfigIgn ignoreProject verbosity globalConfigFlag with without + baseCtx <- withProjectOrGlobalConfig verbosity ignoreProject globalConfigFlag with without let scriptOrError script err = do @@ -212,7 +208,6 @@ $ resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors @@ -227,7 +222,7 @@ _ <- singleExeOrElse (reportTargetProblems verbosity - [TargetProblemMultipleTargets targets]) + [multipleTargetsProblem targets]) targets let elaboratedPlan' = pruneInstallPlanToTargets @@ -303,11 +298,8 @@ handleDoesNotExist () (removeDirectoryRecursive tmpDir) where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags - mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags + ignoreProject = crunIgnoreProject clientRunFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here globalConfigFlag = projectConfigConfigFile (projectConfigShared cliConfig) -- | Used by the main CLI parser as heuristic to decide whether @cabal@ was @@ -481,7 +473,7 @@ -- buildable. Fail if there are no or multiple buildable exe components. -- selectPackageTargets :: TargetSelector - -> [AvailableTarget k] -> Either TargetProblem [k] + -> [AvailableTarget k] -> Either RunTargetProblem [k] selectPackageTargets targetSelector targets -- If there is exactly one buildable executable then we select that @@ -490,7 +482,7 @@ -- but fail if there are multiple buildable executables. | not (null targetsExesBuildable) - = Left (TargetProblemMatchesMultiple targetSelector targetsExesBuildable') + = Left (matchesMultipleProblem targetSelector targetsExesBuildable') -- If there are executables but none are buildable then we report those | not (null targetsExes) @@ -498,7 +490,7 @@ -- If there are no executables but some other targets then we report that | not (null targets) - = Left (TargetProblemNoExes targetSelector) + = Left (noExesProblem targetSelector) -- If there are no targets at all then we report that | otherwise @@ -522,36 +514,28 @@ -- to the basic checks on being buildable etc. -- selectComponentTarget :: SubComponentTarget - -> AvailableTarget k -> Either TargetProblem k + -> AvailableTarget k -> Either RunTargetProblem k selectComponentTarget subtarget@WholeComponent t = case availableTargetComponentName t of CExeName _ -> component CTestName _ -> component CBenchName _ -> component - _ -> Left (TargetProblemComponentNotExe pkgid cname) + _ -> Left (componentNotExeProblem pkgid cname) where pkgid = availableTargetPackageId t cname = availableTargetComponentName t - component = either (Left . TargetProblemCommon) return $ - selectComponentTargetBasic subtarget t + component = selectComponentTargetBasic subtarget t selectComponentTarget subtarget t - = Left (TargetProblemIsSubComponent (availableTargetPackageId t) - (availableTargetComponentName t) - subtarget) + = Left (isSubComponentProblem (availableTargetPackageId t) + (availableTargetComponentName t) + subtarget) -- | The various error conditions that can occur when matching a -- 'TargetSelector' against 'AvailableTarget's for the @run@ command. -- -data TargetProblem = - TargetProblemCommon TargetProblemCommon - -- | The 'TargetSelector' matches targets but none are buildable - | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] - - -- | There are no targets at all - | TargetProblemNoTargets TargetSelector - +data RunProblem = -- | The 'TargetSelector' matches targets but no executables - | TargetProblemNoExes TargetSelector + TargetProblemNoExes TargetSelector -- | A single 'TargetSelector' matches multiple targets | TargetProblemMatchesMultiple TargetSelector [AvailableTarget ()] @@ -566,25 +550,36 @@ | TargetProblemIsSubComponent PackageId ComponentName SubComponentTarget deriving (Eq, Show) -reportTargetProblems :: Verbosity -> [TargetProblem] -> IO a -reportTargetProblems verbosity = - die' verbosity . unlines . map renderTargetProblem +type RunTargetProblem = TargetProblem RunProblem -renderTargetProblem :: TargetProblem -> String -renderTargetProblem (TargetProblemCommon problem) = - renderTargetProblemCommon "run" problem +noExesProblem :: TargetSelector -> RunTargetProblem +noExesProblem = CustomTargetProblem . TargetProblemNoExes -renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) = - renderTargetProblemNoneEnabled "run" targetSelector targets +matchesMultipleProblem :: TargetSelector -> [AvailableTarget ()] -> RunTargetProblem +matchesMultipleProblem selector targets = CustomTargetProblem $ + TargetProblemMatchesMultiple selector targets + +multipleTargetsProblem :: TargetsMap -> TargetProblem RunProblem +multipleTargetsProblem = CustomTargetProblem . TargetProblemMultipleTargets + +componentNotExeProblem :: PackageId -> ComponentName -> TargetProblem RunProblem +componentNotExeProblem pkgid name = CustomTargetProblem $ + TargetProblemComponentNotExe pkgid name + +isSubComponentProblem + :: PackageId + -> ComponentName + -> SubComponentTarget + -> TargetProblem RunProblem +isSubComponentProblem pkgid name subcomponent = CustomTargetProblem $ + TargetProblemIsSubComponent pkgid name subcomponent -renderTargetProblem (TargetProblemNoExes targetSelector) = - "Cannot run the target '" ++ showTargetSelector targetSelector - ++ "' which refers to " ++ renderTargetSelector targetSelector - ++ " because " - ++ plural (targetSelectorPluralPkgs targetSelector) "it does" "they do" - ++ " not contain any executables." +reportTargetProblems :: Verbosity -> [RunTargetProblem] -> IO a +reportTargetProblems verbosity = + die' verbosity . unlines . map renderRunTargetProblem -renderTargetProblem (TargetProblemNoTargets targetSelector) = +renderRunTargetProblem :: RunTargetProblem -> String +renderRunTargetProblem (TargetProblemNoTargets targetSelector) = case targetSelectorFilter targetSelector of Just kind | kind /= ExeKind -> "The run command is for running executables, but the target '" @@ -592,8 +587,11 @@ ++ renderTargetSelector targetSelector ++ "." _ -> renderTargetProblemNoTargets "run" targetSelector +renderRunTargetProblem problem = + renderTargetProblem "run" renderRunProblem problem -renderTargetProblem (TargetProblemMatchesMultiple targetSelector targets) = +renderRunProblem :: RunProblem -> String +renderRunProblem (TargetProblemMatchesMultiple targetSelector targets) = "The run command is for running a single executable at once. The target '" ++ showTargetSelector targetSelector ++ "' refers to " ++ renderTargetSelector targetSelector ++ " which includes " @@ -605,13 +603,13 @@ [ExeKind, TestKind, BenchKind] ) ++ "." -renderTargetProblem (TargetProblemMultipleTargets selectorMap) = +renderRunProblem (TargetProblemMultipleTargets selectorMap) = "The run command is for running a single executable at once. The targets " ++ renderListCommaAnd [ "'" ++ showTargetSelector ts ++ "'" | ts <- ordNub (concatMap snd (concat (Map.elems selectorMap))) ] ++ " refer to different executables." -renderTargetProblem (TargetProblemComponentNotExe pkgid cname) = +renderRunProblem (TargetProblemComponentNotExe pkgid cname) = "The run command is for running executables, but the target '" ++ showTargetSelector targetSelector ++ "' refers to " ++ renderTargetSelector targetSelector ++ " from the package " @@ -619,10 +617,17 @@ where targetSelector = TargetComponent pkgid cname WholeComponent -renderTargetProblem (TargetProblemIsSubComponent pkgid cname subtarget) = +renderRunProblem (TargetProblemIsSubComponent pkgid cname subtarget) = "The run command can only run an executable as a whole, " ++ "not files or modules within them, but the target '" ++ showTargetSelector targetSelector ++ "' refers to " ++ renderTargetSelector targetSelector ++ "." where targetSelector = TargetComponent pkgid cname subtarget + +renderRunProblem (TargetProblemNoExes targetSelector) = + "Cannot run the target '" ++ showTargetSelector targetSelector + ++ "' which refers to " ++ renderTargetSelector targetSelector + ++ " because " + ++ plural (targetSelectorPluralPkgs targetSelector) "it does" "they do" + ++ " not contain any executables." diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdSdist.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdSdist.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdSdist.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdSdist.hs 2020-05-29 20:33:21.000000000 +0000 @@ -15,11 +15,13 @@ ( Plural(..), renderComponentKind ) import Distribution.Client.ProjectOrchestration ( ProjectBaseContext(..), CurrentCommand(..), establishProjectBaseContext, establishProjectBaseContextWithRoot) +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), defaultNixStyleFlags ) import Distribution.Client.TargetSelector ( TargetSelector(..), ComponentKind , readTargetSelectors, reportTargetSelectorProblems ) import Distribution.Client.Setup - ( GlobalFlags(..), InstallFlags (installProjectFileName) ) + ( GlobalFlags(..) ) import Distribution.Solver.Types.SourcePackage ( SourcePackage(..) ) import Distribution.Client.Types @@ -27,7 +29,7 @@ import Distribution.Client.DistDirLayout ( DistDirLayout(..), ProjectRoot (..) ) import Distribution.Client.ProjectConfig - ( ProjectConfig, withProjectOrGlobalConfigIgn, commandLineFlagsToProjectConfig, projectConfigConfigFile, projectConfigShared ) + ( ProjectConfig, withProjectOrGlobalConfig, commandLineFlagsToProjectConfig, projectConfigConfigFile, projectConfigShared ) import Distribution.Client.ProjectFlags ( ProjectFlags (..), defaultProjectFlags, projectFlagsOptions ) @@ -37,8 +39,6 @@ ( Package(packageId) ) import Distribution.PackageDescription.Configuration ( flattenPackageDescription ) -import Distribution.Pretty - ( prettyShow ) import Distribution.ReadE ( succeedReadE ) import Distribution.Simple.Command @@ -58,7 +58,7 @@ import Distribution.Types.PackageName ( PackageName, unPackageName ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import qualified Codec.Archive.Tar as Tar import qualified Codec.Archive.Tar.Entry as Tar @@ -71,8 +71,6 @@ ( WriterT, tell, execWriterT ) import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BSL -import Data.Either - ( partitionEithers ) import qualified Data.Set as Set import System.Directory ( getCurrentDirectory @@ -96,7 +94,7 @@ , commandNotes = Nothing , commandDefaultFlags = (defaultProjectFlags, defaultSdistFlags) , commandOptions = \showOrParseArgs -> - map (liftOptionL _1) projectFlagsOptions ++ + map (liftOptionL _1) (projectFlagsOptions showOrParseArgs) ++ map (liftOptionL _2) (sdistOptions showOrParseArgs) } @@ -148,7 +146,7 @@ sdistAction :: (ProjectFlags, SdistFlags) -> [String] -> GlobalFlags -> IO () sdistAction (ProjectFlags{..}, SdistFlags{..}) targetStrings globalFlags = do - (baseCtx, distDirLayout) <- withProjectOrGlobalConfigIgn ignoreProject verbosity globalConfigFlag withProject withoutProject + (baseCtx, distDirLayout) <- withProjectOrGlobalConfig verbosity ignoreProject globalConfigFlag withProject withoutProject let localPkgs = localPackages baseCtx @@ -197,17 +195,17 @@ listSources = fromFlagOrDefault False sdistListSources nulSeparated = fromFlagOrDefault False sdistNulSeparated mOutputPath = flagToMaybe sdistOutputPath - ignoreProject = fromFlagOrDefault False flagIgnoreProject + ignoreProject = flagIgnoreProject prjConfig :: ProjectConfig prjConfig = commandLineFlagsToProjectConfig globalFlags - mempty { configVerbosity = sdistVerbosity, configDistPref = sdistDistDir } - mempty - mempty { installProjectFileName = flagProjectFileName } - mempty - mempty - mempty + (defaultNixStyleFlags ()) + { configFlags = (configFlags $ defaultNixStyleFlags ()) + { configVerbosity = sdistVerbosity + , configDistPref = sdistDistDir + } + } mempty globalConfigFlag = projectConfigConfigFile (projectConfigShared prjConfig) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdTest.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdTest.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdTest.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdTest.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,4 +1,4 @@ -{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: test -- @@ -8,38 +8,43 @@ testAction, -- * Internals exposed for testing - TargetProblem(..), + isSubComponentProblem, + notTestProblem, + noTestsProblem, selectPackageTargets, selectComponentTarget ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.ProjectOrchestration import Distribution.Client.CmdErrorMessages - + ( renderTargetSelector, showTargetSelector, targetSelectorFilter, plural, + renderTargetProblem, + renderTargetProblemNoTargets, targetSelectorPluralPkgs ) +import Distribution.Client.TargetProblem + ( TargetProblem (..) ) +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Setup - ( GlobalFlags(..), ConfigFlags(..), ConfigExFlags, InstallFlags ) -import qualified Distribution.Client.Setup as Client + ( GlobalFlags(..), ConfigFlags(..) ) import Distribution.Simple.Setup - ( HaddockFlags, TestFlags(..), BenchmarkFlags(..), fromFlagOrDefault ) + ( TestFlags(..), fromFlagOrDefault ) import Distribution.Simple.Command ( CommandUI(..), usageAlternatives ) import Distribution.Simple.Flag ( Flag(..) ) -import Distribution.Pretty - ( prettyShow ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import Distribution.Simple.Utils ( notice, wrapText, die' ) -import Control.Monad (when) import qualified System.Exit (exitSuccess) -testCommand :: CommandUI ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags - ) -testCommand = Client.installCommand +testCommand :: CommandUI (NixStyleFlags ()) +testCommand = CommandUI { commandName = "v2-test" , commandSynopsis = "Run test-suites" , commandUsage = usageAlternatives "v2-test" [ "[TARGETS] [FLAGS]" ] @@ -72,6 +77,8 @@ ++ cmdCommonHelpTextNewBuildBeta + , commandDefaultFlags = defaultNixStyleFlags () + , commandOptions = nixStyleOptions (const []) } @@ -86,12 +93,8 @@ -- For more details on how this works, see the module -- "Distribution.Client.ProjectOrchestration" -- -testAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags ) - -> [String] -> GlobalFlags -> IO () -testAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags ) - targetStrings globalFlags = do +testAction :: NixStyleFlags () -> [String] -> GlobalFlags -> IO () +testAction flags@NixStyleFlags {..} targetStrings globalFlags = do baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand @@ -113,7 +116,6 @@ $ resolveTargets selectPackageTargets selectComponentTarget - TargetProblemCommon elaboratedPlan Nothing targetSelectors @@ -131,11 +133,7 @@ where failWhenNoTestSuites = testFailWhenNoTestSuites testFlags verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags - mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags -- | This defines what a 'TargetSelector' means for the @test@ command. -- It selects the 'AvailableTarget's that the 'TargetSelector' refers to, @@ -145,7 +143,7 @@ -- or fail if there are no test-suites or no buildable test-suites. -- selectPackageTargets :: TargetSelector - -> [AvailableTarget k] -> Either TargetProblem [k] + -> [AvailableTarget k] -> Either TestTargetProblem [k] selectPackageTargets targetSelector targets -- If there are any buildable test-suite targets then we select those @@ -158,7 +156,7 @@ -- If there are no test-suite but some other targets then we report that | not (null targets) - = Left (TargetProblemNoTests targetSelector) + = Left (noTestsProblem targetSelector) -- If there are no targets at all then we report that | otherwise @@ -180,34 +178,28 @@ -- to the basic checks on being buildable etc. -- selectComponentTarget :: SubComponentTarget - -> AvailableTarget k -> Either TargetProblem k + -> AvailableTarget k -> Either TestTargetProblem k selectComponentTarget subtarget@WholeComponent t | CTestName _ <- availableTargetComponentName t - = either (Left . TargetProblemCommon) return $ + = either Left return $ selectComponentTargetBasic subtarget t | otherwise - = Left (TargetProblemComponentNotTest (availableTargetPackageId t) - (availableTargetComponentName t)) + = Left (notTestProblem + (availableTargetPackageId t) + (availableTargetComponentName t)) selectComponentTarget subtarget t - = Left (TargetProblemIsSubComponent (availableTargetPackageId t) - (availableTargetComponentName t) - subtarget) + = Left (isSubComponentProblem + (availableTargetPackageId t) + (availableTargetComponentName t) + subtarget) -- | The various error conditions that can occur when matching a -- 'TargetSelector' against 'AvailableTarget's for the @test@ command. -- -data TargetProblem = - TargetProblemCommon TargetProblemCommon - - -- | The 'TargetSelector' matches targets but none are buildable - | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] - - -- | There are no targets at all - | TargetProblemNoTargets TargetSelector - +data TestProblem = -- | The 'TargetSelector' matches targets but no test-suites - | TargetProblemNoTests TargetSelector + TargetProblemNoTests TargetSelector -- | The 'TargetSelector' refers to a component that is not a test-suite | TargetProblemComponentNotTest PackageId ComponentName @@ -216,17 +208,35 @@ | TargetProblemIsSubComponent PackageId ComponentName SubComponentTarget deriving (Eq, Show) -reportTargetProblems :: Verbosity -> Flag Bool -> [TargetProblem] -> IO a + +type TestTargetProblem = TargetProblem TestProblem + + +noTestsProblem :: TargetSelector -> TargetProblem TestProblem +noTestsProblem = CustomTargetProblem . TargetProblemNoTests + +notTestProblem :: PackageId -> ComponentName -> TargetProblem TestProblem +notTestProblem pkgid name = CustomTargetProblem $ TargetProblemComponentNotTest pkgid name + +isSubComponentProblem + :: PackageId + -> ComponentName + -> SubComponentTarget + -> TargetProblem TestProblem +isSubComponentProblem pkgid name subcomponent = CustomTargetProblem $ + TargetProblemIsSubComponent pkgid name subcomponent + +reportTargetProblems :: Verbosity -> Flag Bool -> [TestTargetProblem] -> IO a reportTargetProblems verbosity failWhenNoTestSuites problems = case (failWhenNoTestSuites, problems) of - (Flag True, [TargetProblemNoTests _]) -> + (Flag True, [CustomTargetProblem (TargetProblemNoTests _)]) -> die' verbosity problemsMessage - (_, [TargetProblemNoTests selector]) -> do + (_, [CustomTargetProblem (TargetProblemNoTests selector)]) -> do notice verbosity (renderAllowedNoTestsProblem selector) System.Exit.exitSuccess (_, _) -> die' verbosity problemsMessage where - problemsMessage = unlines . map renderTargetProblem $ problems + problemsMessage = unlines . map renderTestTargetProblem $ problems -- | Unless @--test-fail-when-no-test-suites@ flag is passed, we don't -- @die@ when the target problem is 'TargetProblemNoTests'. @@ -236,21 +246,8 @@ renderAllowedNoTestsProblem selector = "No tests to run for " ++ renderTargetSelector selector -renderTargetProblem :: TargetProblem -> String -renderTargetProblem (TargetProblemCommon problem) = - renderTargetProblemCommon "run" problem - -renderTargetProblem (TargetProblemNoneEnabled targetSelector targets) = - renderTargetProblemNoneEnabled "test" targetSelector targets - -renderTargetProblem (TargetProblemNoTests targetSelector) = - "Cannot run tests for the target '" ++ showTargetSelector targetSelector - ++ "' which refers to " ++ renderTargetSelector targetSelector - ++ " because " - ++ plural (targetSelectorPluralPkgs targetSelector) "it does" "they do" - ++ " not contain any test suites." - -renderTargetProblem (TargetProblemNoTargets targetSelector) = +renderTestTargetProblem :: TestTargetProblem -> String +renderTestTargetProblem (TargetProblemNoTargets targetSelector) = case targetSelectorFilter targetSelector of Just kind | kind /= TestKind -> "The test command is for running test suites, but the target '" @@ -259,8 +256,19 @@ ++ "\n" ++ show targetSelector _ -> renderTargetProblemNoTargets "test" targetSelector +renderTestTargetProblem problem = + renderTargetProblem "test" renderTestProblem problem + + +renderTestProblem :: TestProblem -> String +renderTestProblem (TargetProblemNoTests targetSelector) = + "Cannot run tests for the target '" ++ showTargetSelector targetSelector + ++ "' which refers to " ++ renderTargetSelector targetSelector + ++ " because " + ++ plural (targetSelectorPluralPkgs targetSelector) "it does" "they do" + ++ " not contain any test suites." -renderTargetProblem (TargetProblemComponentNotTest pkgid cname) = +renderTestProblem (TargetProblemComponentNotTest pkgid cname) = "The test command is for running test suites, but the target '" ++ showTargetSelector targetSelector ++ "' refers to " ++ renderTargetSelector targetSelector ++ " from the package " @@ -268,7 +276,7 @@ where targetSelector = TargetComponent pkgid cname WholeComponent -renderTargetProblem (TargetProblemIsSubComponent pkgid cname subtarget) = +renderTestProblem (TargetProblemIsSubComponent pkgid cname subtarget) = "The test command can only run test suites as a whole, " ++ "not files or modules within them, but the target '" ++ showTargetSelector targetSelector ++ "' refers to " diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdUpdate.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdUpdate.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/CmdUpdate.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/CmdUpdate.hs 2020-05-29 20:33:21.000000000 +0000 @@ -15,6 +15,8 @@ import Prelude () import Distribution.Client.Compat.Prelude +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..), nixStyleOptions, defaultNixStyleFlags ) import Distribution.Client.Compat.Directory ( setModificationTime ) import Distribution.Client.ProjectOrchestration @@ -23,6 +25,8 @@ , ProjectConfigShared(projectConfigConfigFile) , projectConfigWithSolverRepoContext , withProjectOrGlobalConfig ) +import Distribution.Client.ProjectFlags + ( ProjectFlags (..) ) import Distribution.Client.Types ( Repo(..), RepoName (..), unRepoName, RemoteRepo(..), isRepoRemote ) import Distribution.Client.HttpUtils @@ -32,49 +36,42 @@ import Distribution.Client.JobControl ( newParallelJobControl, spawnJob, collectJob ) import Distribution.Client.Setup - ( GlobalFlags, ConfigFlags(..), ConfigExFlags, InstallFlags + ( GlobalFlags, ConfigFlags(..) , UpdateFlags, defaultUpdateFlags , RepoContext(..) ) -import Distribution.Simple.Setup - ( HaddockFlags, TestFlags, BenchmarkFlags, fromFlagOrDefault ) +import Distribution.Simple.Flag + ( fromFlagOrDefault ) import Distribution.Simple.Utils ( die', notice, wrapText, writeFileAtomic, noticeNoWrap ) import Distribution.Verbosity - ( Verbosity, normal, lessVerbose ) + ( normal, lessVerbose ) import Distribution.Client.IndexUtils.Timestamp import Distribution.Client.IndexUtils.IndexState import Distribution.Client.IndexUtils ( updateRepoIndexCache, Index(..), writeIndexTimestamp , currentIndexTimestamp, indexBaseName ) -import Distribution.Pretty (Pretty (..), prettyShow) -import Distribution.Parsec (Parsec (..), simpleParsec) -import Data.Maybe (fromJust) +import qualified Data.Maybe as Unsafe (fromJust) import qualified Distribution.Compat.CharParsing as P import qualified Text.PrettyPrint as Disp -import Control.Monad (mapM, mapM_) import qualified Data.ByteString.Lazy as BS import Distribution.Client.GZipUtils (maybeDecompress) import System.FilePath ((<.>), dropExtension) import Data.Time (getCurrentTime) import Distribution.Simple.Command ( CommandUI(..), usageAlternatives ) -import qualified Distribution.Client.Setup as Client import qualified Hackage.Security.Client as Sec -updateCommand :: CommandUI ( ConfigFlags, ConfigExFlags - , InstallFlags, HaddockFlags - , TestFlags, BenchmarkFlags - ) -updateCommand = Client.installCommand { - commandName = "v2-update", - commandSynopsis = "Updates list of known packages.", - commandUsage = usageAlternatives "v2-update" [ "[FLAGS] [REPOS]" ], - commandDescription = Just $ \_ -> wrapText $ - "For all known remote repositories, download the package list.", - commandNotes = Just $ \pname -> +updateCommand :: CommandUI (NixStyleFlags ()) +updateCommand = CommandUI + { commandName = "v2-update" + , commandSynopsis = "Updates list of known packages." + , commandUsage = usageAlternatives "v2-update" [ "[FLAGS] [REPOS]" ] + , commandDescription = Just $ \_ -> wrapText $ + "For all known remote repositories, download the package list." + , commandNotes = Just $ \pname -> "REPO has the format [,] where index-state follows\n" ++ "the same format and syntax that is supported by the --index-state flag.\n\n" ++ "Examples:\n" @@ -98,6 +95,10 @@ ++ "https://github.com/haskell/cabal/issues and if you\nhave any time " ++ "to get involved and help with testing, fixing bugs etc then\nthat " ++ "is very much appreciated.\n" + -- TODO: Add ProjectFlags to NixStyleFlags, + -- so project-file won't be ambiguous + , commandOptions = nixStyleOptions $ const [] + , commandDefaultFlags = defaultNixStyleFlags () } data UpdateRequest = UpdateRequest @@ -114,13 +115,11 @@ state <- P.char ',' *> parsec <|> pure IndexStateHead return (UpdateRequest name state) -updateAction :: ( ConfigFlags, ConfigExFlags, InstallFlags - , HaddockFlags, TestFlags, BenchmarkFlags ) - -> [String] -> GlobalFlags -> IO () -updateAction ( configFlags, configExFlags, installFlags - , haddockFlags, testFlags, benchmarkFlags ) - extraArgs globalFlags = do - projectConfig <- withProjectOrGlobalConfig verbosity globalConfigFlag +updateAction :: NixStyleFlags () -> [String] -> GlobalFlags -> IO () +updateAction flags@NixStyleFlags {..} extraArgs globalFlags = do + let ignoreProject = flagIgnoreProject projectFlags + + projectConfig <- withProjectOrGlobalConfig verbosity ignoreProject globalConfigFlag (projectConfig <$> establishProjectBaseContext verbosity cliConfig OtherCommand) (\globalConfig -> return $ globalConfig <> cliConfig) @@ -134,7 +133,7 @@ Just r -> return r Nothing -> die' verbosity $ "'v2-update' unable to parse repo: \"" ++ s ++ "\"" - updateRepoRequests <- mapM parseArg extraArgs + updateRepoRequests <- traverse parseArg extraArgs unless (null updateRepoRequests) $ do let remoteRepoNames = map repoName repos @@ -152,7 +151,7 @@ -- repositories to HEAD. [] -> map (,IndexStateHead) repos updateRequests -> let repoMap = [(repoName r, r) | r <- repos] - lookup' k = fromJust (lookup k repoMap) + lookup' k = Unsafe.fromJust (lookup k repoMap) in [ (lookup' name, state) | (UpdateRequest name state) <- updateRequests ] @@ -166,17 +165,13 @@ : map (("- " ++) . unRepoName . repoName . fst) reposToUpdate jobCtrl <- newParallelJobControl (length reposToUpdate) - mapM_ (spawnJob jobCtrl . updateRepo verbosity defaultUpdateFlags repoCtxt) + traverse_ (spawnJob jobCtrl . updateRepo verbosity defaultUpdateFlags repoCtxt) reposToUpdate - mapM_ (\_ -> collectJob jobCtrl) reposToUpdate + traverse_ (\_ -> collectJob jobCtrl) reposToUpdate where verbosity = fromFlagOrDefault normal (configVerbosity configFlags) - cliConfig = commandLineFlagsToProjectConfig - globalFlags configFlags configExFlags - installFlags - mempty -- ClientInstallFlags, not needed here - haddockFlags testFlags benchmarkFlags + cliConfig = commandLineFlagsToProjectConfig globalFlags flags mempty -- ClientInstallFlags, not needed here globalConfigFlag = projectConfigConfigFile (projectConfigShared cliConfig) updateRepo :: Verbosity -> UpdateFlags -> RepoContext -> (Repo, RepoIndexState) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/ExecutablePath.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/ExecutablePath.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/ExecutablePath.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/ExecutablePath.hs 2020-05-29 20:33:21.000000000 +0000 @@ -7,6 +7,8 @@ module Distribution.Client.Compat.ExecutablePath ( getExecutablePath ) where +import Prelude + -- The imports are purposely kept completely disjoint to prevent edits -- to one OS implementation from breaking another. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/FilePerms.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/FilePerms.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/FilePerms.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/FilePerms.hs 2020-05-29 20:33:21.000000000 +0000 @@ -6,6 +6,8 @@ setFileHidden, ) where +import Prelude (FilePath, IO, return, ($)) + #ifndef mingw32_HOST_OS import System.Posix.Types ( FileMode ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Orphans.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Orphans.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Orphans.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Orphans.hs 2020-05-29 20:33:21.000000000 +0000 @@ -7,6 +7,7 @@ import Distribution.Compat.Typeable (typeRep) import Distribution.Utils.Structured (Structure (Nominal), Structured (..)) import Network.URI (URI (..), URIAuth (..)) +import Prelude (error, return) ------------------------------------------------------------------------------- -- network-uri @@ -34,7 +35,7 @@ --Added in 46aa019ec85e313e257d122a3549cce01996c566 instance Binary SomeException where put _ = return () - get = fail "cannot serialise exceptions" + get = error "cannot serialise exceptions" instance Structured SomeException where structure p = Nominal (typeRep p) 0 "SomeException" [] diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Prelude.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Prelude.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Prelude.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Prelude.hs 2020-05-29 20:33:21.000000000 +0000 @@ -12,7 +12,13 @@ -- module Distribution.Client.Compat.Prelude ( module Distribution.Compat.Prelude.Internal + , module X ) where -import Distribution.Compat.Prelude.Internal import Distribution.Client.Compat.Orphans () +import Distribution.Compat.Prelude.Internal +import Prelude () + +import Distribution.Parsec as X (CabalParsing, Parsec (..), eitherParsec, explicitEitherParsec, simpleParsec) +import Distribution.Pretty as X (Pretty (..), prettyShow) +import Distribution.Verbosity as X (Verbosity) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Process.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Process.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Process.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Process.hs 2020-05-29 20:33:21.000000000 +0000 @@ -16,6 +16,8 @@ readProcessWithExitCode ) where +import Prelude (FilePath, IO, String, return, (||)) + import Control.Exception (catch, throw) import System.Exit (ExitCode (ExitFailure)) import System.IO.Error (isDoesNotExistError, isPermissionError) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Semaphore.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Semaphore.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Semaphore.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Compat/Semaphore.hs 2020-05-29 20:33:21.000000000 +0000 @@ -7,6 +7,8 @@ , signalQSem ) where +import Prelude (IO, return, Eq (..), Int, Bool (..), ($), ($!), Num (..), flip) + import Control.Concurrent.STM (TVar, atomically, newTVar, readTVar, retry, writeTVar) import Control.Exception (mask_, onException) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Config.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Config.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Config.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Config.hs 2020-05-29 20:33:21.000000000 +0000 @@ -117,19 +117,16 @@ import Distribution.Compiler ( CompilerFlavor(..), defaultCompilerFlavor ) import Distribution.Verbosity - ( Verbosity, normal ) + ( normal ) import qualified Distribution.Compat.CharParsing as P - +import Distribution.Client.ProjectFlags (ProjectFlags (..)) import Distribution.Solver.Types.ConstraintSource -import Data.List - ( partition ) import qualified Distribution.Deprecated.ReadP as Parse ( (<++), option ) import qualified Text.PrettyPrint as Disp ( render, text, empty ) -import Distribution.Parsec (parsec, simpleParsec, parsecOptCommaList) -import Distribution.Pretty (pretty, prettyShow) +import Distribution.Parsec (parsecOptCommaList) import Text.PrettyPrint ( ($+$) ) import Text.PrettyPrint.HughesPJ @@ -144,31 +141,28 @@ ( isDoesNotExistError ) import Distribution.Compat.Environment ( getEnvironment, lookupEnv ) -import Distribution.Compat.Exception - ( catchIO ) import qualified Data.Map as M -import Data.Function - ( on ) -- -- * Configuration saved in the config file -- -data SavedConfig = SavedConfig { - savedGlobalFlags :: GlobalFlags, - savedInitFlags :: IT.InitFlags, - savedInstallFlags :: InstallFlags, - savedClientInstallFlags :: ClientInstallFlags, - savedConfigureFlags :: ConfigFlags, - savedConfigureExFlags :: ConfigExFlags, - savedUserInstallDirs :: InstallDirs (Flag PathTemplate), - savedGlobalInstallDirs :: InstallDirs (Flag PathTemplate), - savedUploadFlags :: UploadFlags, - savedReportFlags :: ReportFlags, - savedHaddockFlags :: HaddockFlags, - savedTestFlags :: TestFlags, - savedBenchmarkFlags :: BenchmarkFlags - } deriving Generic +data SavedConfig = SavedConfig + { savedGlobalFlags :: GlobalFlags + , savedInitFlags :: IT.InitFlags + , savedInstallFlags :: InstallFlags + , savedClientInstallFlags :: ClientInstallFlags + , savedConfigureFlags :: ConfigFlags + , savedConfigureExFlags :: ConfigExFlags + , savedUserInstallDirs :: InstallDirs (Flag PathTemplate) + , savedGlobalInstallDirs :: InstallDirs (Flag PathTemplate) + , savedUploadFlags :: UploadFlags + , savedReportFlags :: ReportFlags + , savedHaddockFlags :: HaddockFlags + , savedTestFlags :: TestFlags + , savedBenchmarkFlags :: BenchmarkFlags + , savedProjectFlags :: ProjectFlags + } deriving Generic instance Monoid SavedConfig where mempty = gmempty @@ -188,7 +182,8 @@ savedReportFlags = combinedSavedReportFlags, savedHaddockFlags = combinedSavedHaddockFlags, savedTestFlags = combinedSavedTestFlags, - savedBenchmarkFlags = combinedSavedBenchmarkFlags + savedBenchmarkFlags = combinedSavedBenchmarkFlags, + savedProjectFlags = combinedSavedProjectFlags } where -- This is ugly, but necessary. If we're mappending two config files, we @@ -329,8 +324,7 @@ installNumJobs = combine installNumJobs, installKeepGoing = combine installKeepGoing, installRunTests = combine installRunTests, - installOfflineMode = combine installOfflineMode, - installProjectFileName = combine installProjectFileName + installOfflineMode = combine installOfflineMode } where combine = combine' savedInstallFlags @@ -338,7 +332,6 @@ combinedSavedClientInstallFlags = ClientInstallFlags { cinstInstallLibs = combine cinstInstallLibs - , cinstIgnoreProject = combine cinstIgnoreProject , cinstEnvironmentPath = combine cinstEnvironmentPath , cinstOverwritePolicy = combine cinstOverwritePolicy , cinstInstallMethod = combine cinstInstallMethod @@ -521,6 +514,12 @@ combine = combine' savedBenchmarkFlags lastNonEmpty = lastNonEmpty' savedBenchmarkFlags + combinedSavedProjectFlags = ProjectFlags + { flagProjectFileName = combine flagProjectFileName + , flagIgnoreProject = combine flagIgnoreProject + } + where + combine = combine' savedProjectFlags -- -- * Default config diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Configure.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Configure.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Configure.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Configure.hs 2020-05-29 20:33:21.000000000 +0000 @@ -26,7 +26,6 @@ import Distribution.Client.Compat.Prelude import Distribution.Utils.Generic (safeHead) -import Distribution.Pretty (prettyShow) import Distribution.Client.Dependency import qualified Distribution.Client.InstallPlan as InstallPlan import Distribution.Client.SolverInstallPlan (SolverInstallPlan) @@ -81,11 +80,7 @@ , defaultPackageDesc ) import Distribution.System ( Platform ) -import Distribution.Verbosity as Verbosity - ( Verbosity ) -import Data.Foldable - ( forM_ ) import System.FilePath ( () ) -- | Choose the Cabal version such that the setup scripts compiled against this @@ -273,10 +268,10 @@ -> ConfigExFlags -> IO () checkConfigExFlags verbosity installedPkgIndex sourcePkgIndex flags = do - forM_ (safeHead unknownConstraints) $ \h -> + for_ (safeHead unknownConstraints) $ \h -> warn verbosity $ "Constraint refers to an unknown package: " ++ showConstraint h - forM_ (safeHead unknownPreferences) $ \h -> + for_ (safeHead unknownPreferences) $ \h -> warn verbosity $ "Preference refers to an unknown package: " ++ prettyShow h where diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Dependency/Types.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Dependency/Types.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Dependency/Types.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Dependency/Types.hs 2020-05-29 20:33:21.000000000 +0000 @@ -8,8 +8,6 @@ import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Parsec (Parsec (..)) -import Distribution.Pretty (Pretty (..)) import Text.PrettyPrint (text) import qualified Distribution.Compat.CharParsing as P diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Dependency.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Dependency.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Dependency.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Dependency.hs 2020-05-29 20:33:21.000000000 +0000 @@ -64,6 +64,9 @@ addSetupCabalMaxVersionConstraint, ) where +import Distribution.Client.Compat.Prelude +import qualified Prelude as Unsafe (head) + import Distribution.Solver.Modular ( modularResolver, SolverConfig(..), PruneAfterFirstSuccess(..) ) import Distribution.Simple.PackageIndex (InstalledPackageIndex) @@ -96,13 +99,10 @@ ( Platform ) import Distribution.Client.Utils ( duplicatesBy, mergeBy, MergeResult(..) ) -import Distribution.Simple.Utils - ( comparing ) import Distribution.Simple.Setup ( asBool ) -import Distribution.Pretty (prettyShow) import Distribution.Verbosity - ( normal, Verbosity ) + ( normal ) import Distribution.Version import qualified Distribution.Compat.Graph as Graph @@ -127,12 +127,9 @@ import Distribution.Solver.Types.Variable import Data.List - ( foldl', sort, sortBy, nubBy, maximumBy, intercalate, nub ) -import Data.Function (on) -import Data.Maybe (fromMaybe, mapMaybe) + ( maximumBy ) import qualified Data.Map as Map import qualified Data.Set as Set -import Data.Set (Set) import Control.Exception ( assert ) @@ -847,7 +844,7 @@ | Configured pkg <- pkgs , let packageProblems = configuredPackageProblems platform cinfo pkg , not (null packageProblems) ] - ++ [ DuplicatePackageSolverId (Graph.nodeKey (head dups)) dups + ++ [ DuplicatePackageSolverId (Graph.nodeKey (Unsafe.head dups)) dups | dups <- duplicatesBy (comparing Graph.nodeKey) pkgs ] data PackageProblem = DuplicateFlag PD.FlagName @@ -1029,11 +1026,6 @@ where collect ([], xs) = Right xs collect (errs,_) = Left errs - partitionEithers :: [Either a b] -> ([a],[b]) - partitionEithers = foldr (either left right) ([],[]) - where - left a (l, r) = (a:l, r) - right a (l, r) = (l, a:r) -- | Errors for 'resolveWithoutDependencies'. -- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/DistDirLayout.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/DistDirLayout.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/DistDirLayout.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/DistDirLayout.hs 2020-05-29 20:33:21.000000000 +0000 @@ -22,7 +22,9 @@ defaultCabalDirLayout ) where -import Data.Maybe (fromMaybe) +import Distribution.Client.Compat.Prelude +import Prelude () + import System.FilePath import Distribution.Package @@ -30,8 +32,6 @@ import Distribution.Compiler import Distribution.Simple.Compiler ( PackageDB(..), PackageDBStack, OptimisationLevel(..) ) -import Distribution.Pretty - ( prettyShow ) import Distribution.Types.ComponentName import Distribution.Types.LibraryName import Distribution.System diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Exec.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Exec.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Exec.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Exec.hs 2020-05-29 20:33:21.000000000 +0000 @@ -21,7 +21,6 @@ import Distribution.Simple.Utils (die') import Distribution.System (Platform(..)) -import Distribution.Verbosity (Verbosity) -- | Execute the given command in the package's environment. -- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Fetch.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Fetch.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Fetch.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Fetch.hs 2020-05-29 20:33:21.000000000 +0000 @@ -14,6 +14,9 @@ fetch, ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.Types import Distribution.Client.Targets import Distribution.Client.FetchUtils hiding (fetchPackage) @@ -44,13 +47,6 @@ ( die', notice, debug ) import Distribution.System ( Platform ) -import Distribution.Pretty - ( prettyShow ) -import Distribution.Verbosity - ( Verbosity ) - -import Control.Monad - ( filterM ) -- ------------------------------------------------------------ -- * The fetch command @@ -84,7 +80,7 @@ fetch verbosity packageDBs repoCtxt comp platform progdb globalFlags fetchFlags userTargets = do - mapM_ (checkTarget verbosity) userTargets + traverse_ (checkTarget verbosity) userTargets installedPkgIndex <- getInstalledPackages verbosity comp packageDBs progdb sourcePkgDb <- getSourcePackages verbosity repoCtxt @@ -112,7 +108,7 @@ "The following packages would be fetched:" : map (prettyShow . packageId) pkgs' - else mapM_ (fetchPackage verbosity repoCtxt . packageSource) pkgs' + else traverse_ (fetchPackage verbosity repoCtxt . packageSource) pkgs' where dryRun = fromFlag (fetchDryRun fetchFlags) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/FetchUtils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/FetchUtils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/FetchUtils.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/FetchUtils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -32,6 +32,9 @@ downloadIndex, ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.Types import Distribution.Client.HttpUtils ( downloadURI, isOldHackageURI, DownloadResult(..) @@ -41,19 +44,14 @@ ( PackageId, packageName, packageVersion ) import Distribution.Simple.Utils ( notice, info, debug, die' ) -import Distribution.Pretty - ( prettyShow ) import Distribution.Verbosity - ( Verbosity, verboseUnmarkOutput ) + ( verboseUnmarkOutput ) import Distribution.Client.GlobalFlags ( RepoContext(..) ) import Distribution.Client.Utils ( ProgressPhase(..), progressMessage ) -import Data.Maybe -import Data.Map (Map) import qualified Data.Map as Map -import Control.Monad import Control.Exception import Control.Concurrent.Async import Control.Concurrent.MVar @@ -237,13 +235,15 @@ asyncFetchPackages verbosity repoCtxt pkglocs body = do --TODO: [nice to have] use parallel downloads? - asyncDownloadVars <- sequence [ do v <- newEmptyMVar - return (pkgloc, v) - | pkgloc <- pkglocs ] + asyncDownloadVars <- sequenceA + [ do v <- newEmptyMVar + return (pkgloc, v) + | pkgloc <- pkglocs + ] let fetchPackages :: IO () fetchPackages = - forM_ asyncDownloadVars $ \(pkgloc, var) -> do + for_ asyncDownloadVars $ \(pkgloc, var) -> do -- Suppress marking here, because 'withAsync' means -- that we get nondeterministic interleaving result <- try $ fetchPackage (verboseUnmarkOutput verbosity) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/FileMonitor.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/FileMonitor.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/FileMonitor.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/FileMonitor.hs 2020-05-29 20:33:21.000000000 +0000 @@ -652,7 +652,7 @@ . filter (matchGlob glob) =<< liftIO (getDirectoryContents (root dirName)) - children' <- mapM probeMergeResult $ + children' <- traverse probeMergeResult $ mergeBy (\(path1,_) path2 -> compare path1 path2) children (sort matches) @@ -717,14 +717,14 @@ matches <- return . filter (matchGlob glob) =<< liftIO (getDirectoryContents (root dirName)) - mapM_ probeMergeResult $ + traverse_ probeMergeResult $ mergeBy (\(path1,_) path2 -> compare path1 path2) children (sort matches) return mtime' -- Check that none of the children have changed - forM_ children $ \(file, status) -> + for_ children $ \(file, status) -> probeMonitorStateFileStatus root (dirName file) status @@ -928,7 +928,7 @@ subdirs <- filterM (\subdir -> doesDirectoryExist (absdir subdir)) $ filter (matchGlob glob) dirEntries subdirStates <- - forM (sort subdirs) $ \subdir -> do + for (sort subdirs) $ \subdir -> do fstate <- buildMonitorStateGlobRel mstartTime hashcache kindfile kinddir root (dir subdir) globPath' @@ -938,7 +938,7 @@ GlobFile glob -> do let files = filter (matchGlob glob) dirEntries filesStates <- - forM (sort files) $ \file -> do + for (sort files) $ \file -> do fstate <- buildMonitorStateFile mstartTime hashcache kindfile kinddir root (dir file) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Freeze.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Freeze.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Freeze.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Freeze.hs 2020-05-29 20:33:21.000000000 +0000 @@ -53,10 +53,6 @@ ( die', notice, debug, writeFileAtomic ) import Distribution.System ( Platform ) -import Distribution.Pretty - ( prettyShow ) -import Distribution.Verbosity - ( Verbosity ) import qualified Data.ByteString.Lazy.Char8 as BS.Char8 import Distribution.Version diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/GenBounds.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/GenBounds.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/GenBounds.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/GenBounds.hs 2020-05-29 20:33:21.000000000 +0000 @@ -44,10 +44,6 @@ ( tryFindPackageDesc ) import Distribution.System ( Platform ) -import Distribution.Pretty - ( prettyShow ) -import Distribution.Verbosity - ( Verbosity ) import Distribution.Version ( Version, alterVersion , LowerBound(..), UpperBound(..), VersionRange, asVersionIntervals diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Get.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Get.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Get.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Get.hs 2020-05-29 20:33:21.000000000 +0000 @@ -24,7 +24,6 @@ import Prelude () import Distribution.Client.Compat.Prelude hiding (get) -import Data.Ord (comparing) import Distribution.Compat.Directory ( listDirectory ) import Distribution.Package @@ -33,9 +32,6 @@ ( Flag(..), fromFlag, fromFlagOrDefault, flagToMaybe ) import Distribution.Simple.Utils ( notice, die', info, writeFileAtomic ) -import Distribution.Verbosity - ( Verbosity ) -import Distribution.Pretty (prettyShow) import qualified Distribution.PackageDescription as PD import Distribution.Simple.Program ( programName ) @@ -54,15 +50,9 @@ ( getSourcePackagesAtIndexState, TotalIndexState, ActiveRepos ) import Distribution.Solver.Types.SourcePackage -import Control.Exception - ( Exception(..), catch, throwIO ) -import Control.Monad - ( mapM, forM_, mapM_ ) import qualified Data.Map as Map import System.Directory ( createDirectoryIfMissing, doesDirectoryExist, doesFileExist ) -import System.Exit - ( ExitCode(..) ) import System.FilePath ( (), (<.>), addTrailingPathSeparator ) @@ -83,7 +73,7 @@ _ -> True unless useSourceRepo $ - mapM_ (checkTarget verbosity) userTargets + traverse_ (checkTarget verbosity) userTargets let idxState :: Maybe TotalIndexState idxState = flagToMaybe $ getIndexState getFlags @@ -128,7 +118,7 @@ unpack :: [UnresolvedSourcePackage] -> IO () unpack pkgs = do - forM_ pkgs $ \pkg -> do + for_ pkgs $ \pkg -> do location <- fetchPackage verbosity repoCtxt (packageSource pkg) let pkgid = packageId pkg descOverride | usePristine = Nothing @@ -263,7 +253,7 @@ preferredRepoKind pkgrepos = do -- Do a bunch of checks and collect the required info - pkgrepos' <- mapM preCloneChecks pkgrepos + pkgrepos' <- traverse preCloneChecks pkgrepos -- Configure the VCS drivers for all the repository types we may need vcss <- configureVCSs verbosity $ diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/GlobalFlags.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/GlobalFlags.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/GlobalFlags.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/GlobalFlags.hs 2020-05-29 20:33:21.000000000 +0000 @@ -24,8 +24,6 @@ ( NubList, fromNubList ) import Distribution.Client.HttpUtils ( HttpTransport, configureTransport ) -import Distribution.Verbosity - ( Verbosity ) import Distribution.Simple.Utils ( info, warn ) @@ -34,8 +32,6 @@ import Control.Concurrent ( MVar, newMVar, modifyMVar ) -import Control.Exception - ( throwIO ) import System.FilePath ( () ) import Network.URI diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Glob.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Glob.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Glob.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Glob.hs 2020-05-29 20:33:21.000000000 +0000 @@ -22,9 +22,6 @@ import System.Directory import System.FilePath -import Distribution.Parsec (CabalParsing, Parsec (..)) -import Distribution.Pretty (Pretty (..)) - import qualified Distribution.Compat.CharParsing as P import qualified Text.PrettyPrint as Disp diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Haddock.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Haddock.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Haddock.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Haddock.hs 2020-05-29 20:33:21.000000000 +0000 @@ -16,8 +16,10 @@ ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Data.List (maximumBy) -import Data.Foldable (forM_) import System.Directory (createDirectoryIfMissing, renameFile) import System.FilePath ((), splitFileName) import Distribution.Package @@ -26,11 +28,10 @@ import Distribution.Simple.Program (haddockProgram, ProgramDb , runProgram, requireProgramVersion) import Distribution.Version (mkVersion, orLaterVersion) -import Distribution.Verbosity (Verbosity) import Distribution.Simple.PackageIndex ( InstalledPackageIndex, allPackagesByName ) import Distribution.Simple.Utils - ( comparing, debug, installDirectoryContents, withTempDirectory ) + ( debug, installDirectoryContents, withTempDirectory ) import Distribution.InstalledPackageInfo as InstalledPackageInfo ( InstalledPackageInfo(exposed) ) @@ -41,7 +42,7 @@ regenerateHaddockIndex verbosity pkgs progdb index = do (paths, warns) <- haddockPackagePaths pkgs' Nothing let paths' = [ (interface, html) | (interface, Just html, _) <- paths] - forM_ warns (debug verbosity) + for_ warns (debug verbosity) (confHaddock, _, _) <- requireProgramVersion verbosity haddockProgram diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/HashValue.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/HashValue.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/HashValue.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/HashValue.hs 2020-05-29 20:33:21.000000000 +0000 @@ -19,7 +19,6 @@ import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as LBS -import Control.Exception (evaluate) import System.IO (IOMode (..), withBinaryFile) ----------------------------------------------- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/HttpUtils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/HttpUtils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/HttpUtils.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/HttpUtils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -28,14 +28,6 @@ ( browse, setOutHandler, setErrHandler, setProxy , setAuthorityGen, request, setAllowBasicAuth, setUserAgent ) import qualified Control.Exception as Exception -import Control.Exception - ( evaluate ) -import Control.DeepSeq - ( force ) -import Control.Monad - ( guard ) -import Distribution.Verbosity (Verbosity) -import Distribution.Pretty (prettyShow) import Distribution.Simple.Utils ( die', info, warn, debug, notice , copyFileVerbose, withTempFile, IOData (..) ) @@ -55,7 +47,6 @@ ( withFile, IOMode(ReadMode), hGetContents, hClose ) import System.IO.Error ( isDoesNotExistError ) -import Distribution.Parsec (explicitEitherParsec) import Distribution.Simple.Program ( Program, simpleProgram, ConfiguredProgram, programPath , ProgramInvocation(..), programInvocation @@ -70,7 +61,6 @@ ( getProgramInvocationOutputAndErrors ) import Numeric (showHex) import System.Random (randomRIO) -import System.Exit (ExitCode(..)) import qualified Crypto.Hash.SHA256 as SHA256 import qualified Data.ByteString.Base16 as Base16 diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/ActiveRepos.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/ActiveRepos.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/ActiveRepos.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/ActiveRepos.hs 2020-05-29 20:33:21.000000000 +0000 @@ -13,8 +13,7 @@ import Distribution.Client.Types.RepoName (RepoName (..)) import Prelude () -import Distribution.Parsec (Parsec (..), parsecLeadingCommaNonEmpty) -import Distribution.Pretty (Pretty (..), prettyShow) +import Distribution.Parsec (parsecLeadingCommaNonEmpty) import qualified Distribution.Compat.CharParsing as P import qualified Text.PrettyPrint as Disp diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/IndexState.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/IndexState.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/IndexState.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/IndexState.hs 2020-05-29 20:33:21.000000000 +0000 @@ -21,8 +21,7 @@ import Distribution.Client.IndexUtils.Timestamp (Timestamp) import Distribution.Client.Types.RepoName (RepoName (..)) -import Distribution.Parsec (Parsec (..), parsecLeadingCommaNonEmpty) -import Distribution.Pretty (Pretty (..)) +import Distribution.Parsec (parsecLeadingCommaNonEmpty) import qualified Data.Map.Strict as Map import qualified Distribution.Compat.CharParsing as P diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/Timestamp.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/Timestamp.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/Timestamp.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils/Timestamp.hs 2020-05-29 20:33:21.000000000 +0000 @@ -27,8 +27,6 @@ import Data.Time (UTCTime (..), fromGregorianValid, makeTimeOfDayValid, showGregorian, timeOfDayToTime, timeToTimeOfDay) import Data.Time.Clock.POSIX (posixSecondsToUTCTime, utcTimeToPOSIXSeconds) -import Distribution.Parsec (Parsec (..)) -import Distribution.Pretty (Pretty (..)) import qualified Codec.Archive.Tar.Entry as Tar import qualified Distribution.Compat.CharParsing as P diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/IndexUtils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -54,8 +54,7 @@ import Distribution.Client.IndexUtils.Timestamp import Distribution.Client.Types import Distribution.Verbosity -import Distribution.Pretty (prettyShow) -import Distribution.Parsec (simpleParsec, simpleParsecBS) +import Distribution.Parsec (simpleParsecBS) import Distribution.Package ( PackageId, PackageIdentifier(..), mkPackageName @@ -89,8 +88,6 @@ import qualified Data.Map as Map import qualified Data.Set as Set -import Control.DeepSeq -import Control.Monad import Control.Exception import Data.List (stripPrefix) import qualified Data.ByteString.Lazy as BS @@ -101,7 +98,6 @@ import Distribution.Client.Utils ( byteStringToFilePath , tryFindAddSourcePackageDesc ) import Distribution.Utils.Structured (Structured (..), nominalStructure, structuredEncodeFile, structuredDecodeFileOrFail) -import Distribution.Compat.Exception (catchIO) import Distribution.Compat.Time (getFileAge, getModTime) import System.Directory (doesFileExist, doesDirectoryExist) import System.FilePath @@ -230,7 +226,7 @@ let describeState IndexStateHead = "most recent state" describeState (IndexStateTime time) = "historical state as of " ++ prettyShow time - pkgss <- forM (repoContextRepos repoCtxt) $ \r -> do + pkgss <- for (repoContextRepos repoCtxt) $ \r -> do let rname :: RepoName rname = case r of RepoRemote remote _ -> remoteRepoName remote @@ -699,7 +695,7 @@ dirContents <- listDirectory localDir let contentSet = Set.fromList dirContents - entries <- handle handler $ fmap catMaybes $ forM dirContents $ \file -> do + entries <- handle handler $ fmap catMaybes $ for dirContents $ \file -> do case isTarGz file of Nothing -> do unless (takeFileName file == "noindex.cache" || ".cabal" `isSuffixOf` file) $ @@ -707,7 +703,7 @@ return Nothing Just pkgid | cabalPath `Set.member` contentSet -> do contents <- BSS.readFile (localDir cabalPath) - forM (parseGenericPackageDescriptionMaybe contents) $ \gpd -> + for (parseGenericPackageDescriptionMaybe contents) $ \gpd -> return (CacheGPD gpd contents) where cabalPath = prettyShow pkgid ++ ".cabal" diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Command.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Command.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Command.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Command.hs 2020-05-29 20:33:21.000000000 +0000 @@ -32,11 +32,9 @@ ( (), takeBaseName, equalFilePath ) import qualified Data.List.NonEmpty as NE -import Data.Function - ( on ) import qualified Data.Map as M import Control.Monad - ( (>=>), join, mapM ) + ( (>=>) ) import Control.Arrow ( (&&&), (***) ) @@ -45,8 +43,6 @@ import Distribution.Version ( Version, mkVersion, alterVersion, majorBoundVersion , orLaterVersion, earlierVersion, intersectVersionRanges, VersionRange ) -import Distribution.Verbosity - ( Verbosity ) import Distribution.ModuleName ( ModuleName ) -- And for the Text instance import Distribution.InstalledPackageInfo @@ -85,10 +81,6 @@ ( ProgramDb ) import Distribution.Simple.PackageIndex ( InstalledPackageIndex, moduleNameIndex ) -import Distribution.Pretty - ( prettyShow ) -import Distribution.Parsec - ( eitherParsec ) import Distribution.Solver.Types.PackageIndex ( elemByPackageName ) @@ -657,7 +649,7 @@ modDeps = map (id &&& flip M.lookup modMap) mods message flags "\nGuessing dependencies..." - nub . catMaybes <$> mapM (chooseDep flags) modDeps + nub . catMaybes <$> traverse (chooseDep flags) modDeps -- Given a module and a list of installed packages providing it, -- choose a dependency (i.e. package + version range) to use for that diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Defaults.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Defaults.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Defaults.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Defaults.hs 2020-05-29 20:33:21.000000000 +0000 @@ -19,6 +19,8 @@ , myLibModule ) where +import Prelude (String) + import Distribution.ModuleName ( ModuleName ) -- And for the Text instance import qualified Distribution.ModuleName as ModuleName diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/FileCreators.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/FileCreators.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/FileCreators.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/FileCreators.hs 2020-05-29 20:33:21.000000000 +0000 @@ -34,13 +34,9 @@ import System.FilePath ( (), (<.>), takeExtension ) -import Distribution.Pretty (Pretty, pretty, prettyShow) import Distribution.Types.Dependency import Distribution.Types.VersionRange - -import Control.Monad - ( forM_ ) import Data.Time ( getCurrentTime, utcToLocalTime, toGregorian, localDay, getCurrentTimeZone ) import System.Directory @@ -184,7 +180,7 @@ -- | Create directories, if they were given, and don't already exist. createDirectories :: Maybe [String] -> IO () createDirectories mdirs = case mdirs of - Just dirs -> forM_ dirs (createDirectoryIfMissing True) + Just dirs -> for_ dirs (createDirectoryIfMissing True) Nothing -> return () -- | Create MyLib.hs file, if its the only module in the liste. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Heuristics.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Heuristics.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Heuristics.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Heuristics.hs 2020-05-29 20:33:21.000000000 +0000 @@ -24,7 +24,6 @@ import Distribution.Client.Compat.Prelude import Distribution.Utils.Generic (safeHead, safeTail, safeLast) -import Distribution.Parsec (simpleParsec) import Distribution.Simple.Setup (Flag(..), flagToMaybe) import Distribution.ModuleName ( ModuleName, toFilePath ) @@ -41,11 +40,8 @@ ( packageDescription ) import Distribution.Client.Types ( SourcePackageDb(..) ) -import Control.Monad ( mapM ) -import Data.Char ( isNumber, isLower ) -import Data.Either ( partitionEithers ) +import Data.Char ( isLower ) import Data.List ( isInfixOf ) -import Data.Ord ( comparing ) import qualified Data.Set as Set ( fromList, toList ) import System.Directory ( getCurrentDirectory, getDirectoryContents, doesDirectoryExist, doesFileExist, getHomeDirectory, ) @@ -55,7 +51,6 @@ import Distribution.Client.Init.Types ( InitFlags(..) ) import Distribution.Client.Compat.Process ( readProcessWithExitCode ) -import System.Exit ( ExitCode(..) ) import qualified Distribution.Utils.ShortText as ShortText @@ -104,8 +99,8 @@ x' -> let (c, r) = first repairComponent $ break (not . isAlphaNum) x' in c ++ repairRest r where - repairComponent c | all isNumber c = invalid c - | otherwise = valid c + repairComponent c | all isDigit c = invalid c + | otherwise = valid c repairRest = repair' id ('-' :) -- |Data type of source files found in the working directory @@ -132,12 +127,12 @@ where scan dir hierarchy = do entries <- getDirectoryContents (projectRoot dir) - (files, dirs) <- liftM partitionEithers (mapM (tagIsDir dir) entries) + (files, dirs) <- liftM partitionEithers (traverse (tagIsDir dir) entries) let modules = catMaybes [ guessModuleName hierarchy file | file <- files , maybe False isUpper (safeHead file) ] - modules' <- mapM (findImportsAndExts projectRoot) modules - recMods <- mapM (scanRecursive dir hierarchy) dirs + modules' <- traverse (findImportsAndExts projectRoot) modules + recMods <- traverse (scanRecursive dir hierarchy) dirs return $ concat (modules' : recMods) tagIsDir parent entry = do isDir <- doesDirectoryExist (parent entry) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Licenses.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Licenses.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Licenses.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Licenses.hs 2020-05-29 20:33:21.000000000 +0000 @@ -23,6 +23,8 @@ , isc ) where +import Prelude (String, unlines, (++)) + type License = String bsd2 :: String -> String -> License diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Prompt.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Prompt.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Prompt.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Prompt.hs 2020-05-29 20:33:21.000000000 +0000 @@ -26,15 +26,8 @@ import Prelude () import Distribution.Client.Compat.Prelude hiding (empty) -import Control.Monad - ( mapM_ ) - import Distribution.Client.Init.Types ( InitFlags(..) ) -import Distribution.Parsec - ( Parsec, simpleParsec ) -import Distribution.Pretty - ( Pretty, prettyShow ) import Distribution.Simple.Setup ( Flag(..) ) @@ -76,15 +69,15 @@ -> String -- ^ prompt message -> Maybe t -- ^ optional default value -> IO t -promptDefault' parser pretty pr def = do - putStr $ mkDefPrompt pr (pretty `fmap` def) +promptDefault' parser ppr pr def = do + putStr $ mkDefPrompt pr (ppr `fmap` def) inp <- getLine case (inp, def) of ("", Just d) -> return d _ -> case parser inp of Just t -> return t Nothing -> do putStrLn $ "Couldn't parse " ++ inp ++ ", please try again!" - promptDefault' parser pretty pr def + promptDefault' parser ppr pr def -- | Create a prompt from a prompt string and a String representation -- of an optional default value. @@ -126,7 +119,7 @@ let options1 = map (\c -> (Just c == def, displayItem c)) choices options2 = zip ([1..]::[Int]) (options1 ++ [(False, "Other (specify)") | other]) - mapM_ (putStrLn . \(n,(i,s)) -> showOption n i ++ s) options2 + traverse_ (putStrLn . \(n,(i,s)) -> showOption n i ++ s) options2 promptList' displayItem (length options2) choices def other where showOption n i | n < 10 = " " ++ star i ++ " " ++ rest | otherwise = " " ++ star i ++ rest diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Types.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Types.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Types.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Types.hs 2020-05-29 20:33:21.000000000 +0000 @@ -32,8 +32,6 @@ import qualified Text.PrettyPrint as Disp import qualified Distribution.Compat.CharParsing as P import qualified Data.Map as Map -import Distribution.Pretty (Pretty (..)) -import Distribution.Parsec (Parsec (..)) -- | InitFlags is really just a simple type to represent certain -- portions of a .cabal file. Rather than have a flag for EVERY diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Utils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Utils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Init/Utils.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Init/Utils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -17,6 +17,9 @@ , message ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Simple.Setup ( Flag(..) ) import Distribution.Client.Init.Types diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Install.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Install.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Install.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Install.hs 2020-05-29 20:33:21.000000000 +0000 @@ -36,18 +36,7 @@ import qualified Data.List.NonEmpty as NE import qualified Data.Map as Map import Control.Exception as Exception - ( Exception(toException), bracket, catches - , Handler(Handler), handleJust, IOException, SomeException ) -#ifndef mingw32_HOST_OS -import Control.Exception as Exception - ( Exception(fromException) ) -#endif -import System.Exit - ( ExitCode(..) ) -import Distribution.Compat.Exception - ( catchIO, catchExit ) -import Control.Monad - ( forM_, mapM ) + ( bracket, catches, Handler(Handler), handleJust ) import System.Directory ( getTemporaryDirectory, doesDirectoryExist, doesFileExist, createDirectoryIfMissing, removeFile, renameDirectory, @@ -94,7 +83,8 @@ import qualified Distribution.Client.BuildReports.Storage as BuildReports ( storeAnonymous, storeLocal, fromInstallPlan, fromPlanningFailure ) import qualified Distribution.Client.InstallSymlink as InstallSymlink - ( OverwritePolicy(..), symlinkBinaries ) + ( symlinkBinaries ) +import Distribution.Client.Types.OverwritePolicy (OverwritePolicy (..)) import qualified Distribution.Client.Win32SelfUpgrade as Win32SelfUpgrade import qualified Distribution.Client.World as World import qualified Distribution.InstalledPackageInfo as Installed @@ -129,8 +119,7 @@ , registerCommand, RegisterFlags(..), emptyRegisterFlags , testCommand, TestFlags(..) ) import Distribution.Simple.Utils - ( createDirectoryIfMissingVerbose, comparing - , writeFileAtomic ) + ( createDirectoryIfMissingVerbose, writeFileAtomic ) import Distribution.Simple.InstallDirs as InstallDirs ( PathTemplate, fromPathTemplate, toPathTemplate, substPathTemplate , initialPathTemplateEnv, installDirsTemplateEnv ) @@ -144,15 +133,15 @@ ( Dependency (..), mainLibSet ) import Distribution.Types.GivenComponent ( GivenComponent(..) ) -import Distribution.Pretty ( prettyShow ) import Distribution.Types.PackageVersionConstraint ( PackageVersionConstraint(..), thisPackageVersionConstraint ) import Distribution.Types.MungedPackageId import qualified Distribution.PackageDescription as PackageDescription import Distribution.PackageDescription - ( PackageDescription, GenericPackageDescription(..), PackageFlag(..) - , FlagAssignment, mkFlagAssignment, unFlagAssignment - , showFlagValue, diffFlagAssignment, nullFlagAssignment ) + ( PackageDescription, GenericPackageDescription(..) ) +import Distribution.Types.Flag + ( PackageFlag(..), FlagAssignment, mkFlagAssignment + , showFlagAssignment, diffFlagAssignment, nullFlagAssignment ) import Distribution.PackageDescription.Configuration ( finalizePD ) import Distribution.Version @@ -166,7 +155,7 @@ import Distribution.System ( Platform, OS(Windows), buildOS, buildPlatform ) import Distribution.Verbosity as Verbosity - ( Verbosity, modifyVerbosity, normal, verbose ) + ( modifyVerbosity, normal, verbose ) import Distribution.Simple.BuildPaths ( exeExtension ) import qualified Data.ByteString as BS @@ -666,24 +655,26 @@ showPkg (pkg, _) = prettyShow (packageId pkg) ++ showLatest (pkg) - showPkgAndReason (ReadyPackage pkg', pr) = prettyShow (packageId pkg') ++ - showLatest pkg' ++ - showFlagAssignment (nonDefaultFlags pkg') ++ - showStanzas (confPkgStanzas pkg') ++ - showDep pkg' ++ - case pr of - NewPackage -> " (new package)" - NewVersion _ -> " (new version)" - Reinstall _ cs -> " (reinstall)" ++ case cs of + showPkgAndReason (ReadyPackage pkg', pr) = unwords + [ prettyShow (packageId pkg') + , showLatest pkg' + , showFlagAssignment (nonDefaultFlags pkg') + , showStanzas (confPkgStanzas pkg') + , showDep pkg' + , case pr of + NewPackage -> "(new package)" + NewVersion _ -> "(new version)" + Reinstall _ cs -> "(reinstall)" ++ case cs of [] -> "" - diff -> " (changes: " ++ intercalate ", " (map change diff) + diff -> "(changes: " ++ intercalate ", " (map change diff) ++ ")" + ] showLatest :: Package srcpkg => srcpkg -> String showLatest pkg = case mLatestVersion of Just latestVersion -> if packageVersion pkg < latestVersion - then (" (latest: " ++ prettyShow latestVersion ++ ")") + then ("(latest: " ++ prettyShow latestVersion ++ ")") else "" Nothing -> "" where @@ -706,10 +697,7 @@ in confPkgFlags cpkg `diffFlagAssignment` defaultAssignment showStanzas :: [OptionalStanza] -> String - showStanzas = concatMap ((" *" ++) . showStanza) - - showFlagAssignment :: FlagAssignment -> String - showFlagAssignment = concatMap ((' ' :) . showFlagValue) . unFlagAssignment + showStanzas = unwords . map (("*" ++) . showStanza) change (OnlyInLeft pkgid) = prettyShow pkgid ++ " removed" change (InBoth pkgid pkgid') = prettyShow pkgid ++ " -> " @@ -772,7 +760,7 @@ -- Save solver log case logFile of Nothing -> return () - Just template -> forM_ pkgids $ \pkgid -> + Just template -> for_ pkgids $ \pkgid -> let env = initialPathTemplateEnv pkgid dummyIpid (compilerInfo comp) platform path = fromPathTemplate $ substPathTemplate env template @@ -963,7 +951,7 @@ symlinkBinaries verbosity platform comp configFlags installFlags plan buildOutcomes = do failed <- InstallSymlink.symlinkBinaries platform comp - InstallSymlink.NeverOverwrite + NeverOverwrite configFlags installFlags plan buildOutcomes case failed of @@ -1416,7 +1404,7 @@ let packageDBs = interpretPackageDbFlags (fromFlag (configUserInstall configFlags)) (configPackageDBs configFlags) - forM_ ipkgs' $ \ipkg' -> + for_ ipkgs' $ \ipkg' -> registerPackage verbosity comp progdb packageDBs ipkg' defaultRegisterOptions @@ -1493,7 +1481,7 @@ if is_dir -- Sort so that each prefix of the package -- configurations is well formed - then mapM (readPkgConf pkgConfDest) . sort . filter notHidden + then traverse (readPkgConf pkgConfDest) . sort . filter notHidden =<< getDirectoryContents pkgConfDest else fmap (:[]) $ readPkgConf "." pkgConfDest else return [] diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/InstallPlan.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/InstallPlan.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/InstallPlan.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/InstallPlan.hs 2020-05-29 20:33:21.000000000 +0000 @@ -83,7 +83,7 @@ , HasUnitId(..), UnitId ) import Distribution.Solver.Types.SolverPackage import Distribution.Client.JobControl -import Distribution.Pretty (Pretty (..), prettyShow, defaultStyle) +import Distribution.Pretty (defaultStyle) import Text.PrettyPrint import qualified Distribution.Client.SolverInstallPlan as SolverInstallPlan import Distribution.Client.SolverInstallPlan (SolverInstallPlan) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/InstallSymlink.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/InstallSymlink.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/InstallSymlink.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/InstallSymlink.hs 2020-05-29 20:33:21.000000000 +0000 @@ -13,16 +13,13 @@ -- Managing installing binaries with symlinks. ----------------------------------------------------------------------------- module Distribution.Client.InstallSymlink ( - OverwritePolicy(..), symlinkBinaries, symlinkBinary, trySymlink, ) where -import Distribution.Compat.Binary - ( Binary ) -import Distribution.Utils.Structured - ( Structured ) +import Distribution.Client.Compat.Prelude hiding (ioError) +import Prelude () import Distribution.Client.Types ( ConfiguredPackage(..), BuildOutcomes ) @@ -51,37 +48,24 @@ ( Compiler, compilerInfo, CompilerInfo(..) ) import Distribution.System ( Platform ) -import Distribution.Verbosity ( Verbosity ) import Distribution.Simple.Utils ( info, withTempDirectory ) -import Distribution.Pretty (prettyShow) import System.Directory ( canonicalizePath, getTemporaryDirectory, removeFile ) import System.FilePath ( (), splitPath, joinPath, isAbsolute ) -import Prelude hiding (ioError) import System.IO.Error ( isDoesNotExistError, ioError ) -import Distribution.Compat.Exception ( catchIO ) import Control.Exception ( assert ) -import Data.Maybe - ( catMaybes ) -import GHC.Generics - ( Generic ) import Distribution.Client.Compat.Directory ( createFileLink, getSymbolicLinkTarget, pathIsSymbolicLink ) +import Distribution.Client.Types.OverwritePolicy import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS8 -data OverwritePolicy = NeverOverwrite | AlwaysOverwrite - deriving (Show, Eq, Generic, Bounded, Enum) - -instance Binary OverwritePolicy -instance Structured OverwritePolicy - -- | We would like by default to install binaries into some location that is on -- the user's PATH. For per-user installations on Unix systems that basically -- means the @~/bin/@ directory. On the majority of platforms the @~/bin/@ @@ -120,7 +104,7 @@ publicBinDir <- canonicalizePath symlinkBinDir -- TODO: do we want to do this here? : -- createDirectoryIfMissing True publicBinDir - fmap catMaybes $ sequence + fmap catMaybes $ sequenceA [ do privateBinDir <- pkgBinDir pkg ipid ok <- symlinkBinary overwritePolicy diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/JobControl.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/JobControl.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/JobControl.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/JobControl.hs 2020-05-29 20:33:21.000000000 +0000 @@ -28,13 +28,16 @@ criticalSection ) where -import Control.Monad +import Distribution.Client.Compat.Prelude +import Prelude () + +import Control.Monad (forever, replicateM_) import Control.Concurrent (forkIO) import Control.Concurrent.MVar import Control.Concurrent.STM (STM, atomically) import Control.Concurrent.STM.TVar import Control.Concurrent.STM.TChan -import Control.Exception (SomeException, bracket_, throwIO, try) +import Control.Exception (bracket_, try) import Distribution.Client.Compat.Semaphore diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/List.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/List.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/List.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/List.hs 2020-05-29 20:33:21.000000000 +0000 @@ -26,24 +26,23 @@ import Distribution.License (License) import qualified Distribution.InstalledPackageInfo as Installed import qualified Distribution.PackageDescription as Source +import qualified Distribution.Types.ModuleReexport as Source import Distribution.PackageDescription ( PackageFlag(..), unFlagName ) import Distribution.PackageDescription.Configuration ( flattenPackageDescription ) -import Distribution.Pretty (pretty, prettyShow) import Distribution.Simple.Compiler ( Compiler, PackageDBStack ) import Distribution.Simple.Program (ProgramDb) import Distribution.Simple.Utils - ( equating, comparing, die', notice ) + ( equating, die', notice ) import Distribution.Simple.Setup (fromFlag, fromFlagOrDefault) import Distribution.Simple.PackageIndex (InstalledPackageIndex) import qualified Distribution.Simple.PackageIndex as InstalledPackageIndex import Distribution.Version ( Version, mkVersion, versionNumbers, VersionRange, withinRange, anyVersion , intersectVersionRanges, simplifyVersionRange ) -import Distribution.Verbosity (Verbosity) import qualified Distribution.SPDX as SPDX @@ -67,21 +66,19 @@ import Data.Bits ((.|.)) import Data.List - ( maximumBy, partition ) + ( maximumBy ) import Data.List.NonEmpty (groupBy, nonEmpty) import qualified Data.List as L import Data.Maybe ( fromJust ) import qualified Data.Map as Map import Data.Tree as Tree -import Control.Monad - ( join ) import Control.Exception ( assert ) import qualified Text.PrettyPrint as Disp import Text.PrettyPrint ( lineLength, ribbonsPerLine, Doc, renderStyle, char - , (<+>), nest, ($+$), text, vcat, style, parens, fsep) + , nest, ($+$), text, vcat, style, parens, fsep) import System.Directory ( doesDirectoryExist ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ManpageFlags.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ManpageFlags.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ManpageFlags.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ManpageFlags.hs 2020-05-29 20:33:21.000000000 +0000 @@ -10,7 +10,7 @@ import Distribution.Simple.Command (OptionField (..), ShowOrParseArgs (..), option) import Distribution.Simple.Setup (Flag (..), toFlag, trueArg, optionVerbosity) -import Distribution.Verbosity (Verbosity, normal) +import Distribution.Verbosity (normal) data ManpageFlags = ManpageFlags { manpageVerbosity :: Flag Verbosity diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Manpage.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Manpage.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Manpage.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Manpage.hs 2020-05-29 20:33:21.000000000 +0000 @@ -28,7 +28,6 @@ import Distribution.Compat.Process (createProcess) import Distribution.Simple.Command import Distribution.Simple.Flag (fromFlagOrDefault) -import System.Exit (exitWith) import System.IO (hClose, hPutStr) import qualified System.Process as Process diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Nix.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Nix.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Nix.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Nix.hs 2020-05-29 20:33:21.000000000 +0000 @@ -10,7 +10,7 @@ import Distribution.Client.Compat.Prelude -import Control.Exception (bracket, catch) +import Control.Exception (bracket) import System.Directory ( canonicalizePath, createDirectoryIfMissing, doesDirectoryExist , doesFileExist, removeDirectoryRecursive, removeFile ) @@ -24,8 +24,6 @@ import Distribution.Compat.Environment ( lookupEnv, setEnv, unsetEnv ) -import Distribution.Verbosity - import Distribution.Simple.Program ( Program(..), ProgramDb , addKnownProgram, configureProgram, emptyProgramDb, getDbProgramOutput @@ -84,7 +82,7 @@ -> GlobalFlags -> SavedConfig -> IO () -nixInstantiate verb dist force globalFlags config = +nixInstantiate verb dist force' globalFlags config = findNixExpr globalFlags config >>= \case Nothing -> return () Just shellNix -> do @@ -96,7 +94,7 @@ let timestamp = timestampPath dist shellNix upToDate <- existsAndIsMoreRecentThan timestamp shellNix - let ready = alreadyInShell || (instantiated && upToDate && not force) + let ready = alreadyInShell || (instantiated && upToDate && not force') unless ready $ do let prog = simpleProgram "nix-instantiate" diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/NixStyleOptions.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/NixStyleOptions.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/NixStyleOptions.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/NixStyleOptions.hs 2020-05-29 20:33:21.000000000 +0000 @@ -3,7 +3,9 @@ -- The commands take a lot of the same options, which affect how install plan -- is constructed. module Distribution.Client.NixStyleOptions ( - NixStyleFlags, nixStyleOptions, defaultNixStyleFlags, + NixStyleFlags (..), + nixStyleOptions, + defaultNixStyleFlags, ) where import Distribution.Client.Compat.Prelude @@ -13,51 +15,71 @@ import Distribution.Simple.Setup (BenchmarkFlags, HaddockFlags, TestFlags) import Distribution.Solver.Types.ConstraintSource (ConstraintSource (..)) +import Distribution.Client.ProjectFlags + (ProjectFlags (..), defaultProjectFlags, projectFlagsOptions) import Distribution.Client.Setup (ConfigExFlags, ConfigFlags (..), InstallFlags (..), benchmarkOptions, configureExOptions, configureOptions, haddockOptions, installOptions, liftOptions, testOptions) --- TODO: turn into data record --- Then we could use RecordWildCards in command implementation. -type NixStyleFlags a = (ConfigFlags, ConfigExFlags, InstallFlags, HaddockFlags, TestFlags, BenchmarkFlags, a) +data NixStyleFlags a = NixStyleFlags + { configFlags :: ConfigFlags + , configExFlags :: ConfigExFlags + , installFlags :: InstallFlags + , haddockFlags :: HaddockFlags + , testFlags :: TestFlags + , benchmarkFlags :: BenchmarkFlags + , projectFlags :: ProjectFlags + , extraFlags :: a + } nixStyleOptions :: (ShowOrParseArgs -> [OptionField a]) -> ShowOrParseArgs -> [OptionField (NixStyleFlags a)] nixStyleOptions commandOptions showOrParseArgs = - liftOptions get1 set1 + liftOptions configFlags set1 -- Note: [Hidden Flags] -- hide "constraint", "dependency", and -- "exact-configuration" from the configure options. (filter ((`notElem` ["constraint", "dependency" , "exact-configuration"]) . optionName) $ configureOptions showOrParseArgs) - ++ liftOptions get2 set2 (configureExOptions showOrParseArgs + ++ liftOptions configExFlags set2 (configureExOptions showOrParseArgs ConstraintSourceCommandlineFlag) - ++ liftOptions get3 set3 + ++ liftOptions installFlags set3 -- hide "target-package-db" and "symlink-bindir" flags from the -- install options. -- "symlink-bindir" is obsoleted by "installdir" in ClientInstallFlags (filter ((`notElem` ["target-package-db", "symlink-bindir"]) . optionName) $ installOptions showOrParseArgs) - ++ liftOptions get4 set4 + ++ liftOptions haddockFlags set4 -- hide "verbose" and "builddir" flags from the -- haddock options. (filter ((`notElem` ["v", "verbose", "builddir"]) . optionName) $ haddockOptions showOrParseArgs) - ++ liftOptions get5 set5 (testOptions showOrParseArgs) - ++ liftOptions get6 set6 (benchmarkOptions showOrParseArgs) - ++ liftOptions get7 set7 (commandOptions showOrParseArgs) + ++ liftOptions testFlags set5 (testOptions showOrParseArgs) + ++ liftOptions benchmarkFlags set6 (benchmarkOptions showOrParseArgs) + ++ liftOptions projectFlags set7 (projectFlagsOptions showOrParseArgs) + ++ liftOptions extraFlags set8 (commandOptions showOrParseArgs) where - get1 (a,_,_,_,_,_,_) = a; set1 a (_,b,c,d,e,f,g) = (a,b,c,d,e,f,g) - get2 (_,b,_,_,_,_,_) = b; set2 b (a,_,c,d,e,f,g) = (a,b,c,d,e,f,g) - get3 (_,_,c,_,_,_,_) = c; set3 c (a,b,_,d,e,f,g) = (a,b,c,d,e,f,g) - get4 (_,_,_,d,_,_,_) = d; set4 d (a,b,c,_,e,f,g) = (a,b,c,d,e,f,g) - get5 (_,_,_,_,e,_,_) = e; set5 e (a,b,c,d,_,f,g) = (a,b,c,d,e,f,g) - get6 (_,_,_,_,_,f,_) = f; set6 f (a,b,c,d,e,_,g) = (a,b,c,d,e,f,g) - get7 (_,_,_,_,_,_,g) = g; set7 g (a,b,c,d,e,f,_) = (a,b,c,d,e,f,g) + set1 x flags = flags { configFlags = x } + set2 x flags = flags { configExFlags = x } + set3 x flags = flags { installFlags = x } + set4 x flags = flags { haddockFlags = x } + set5 x flags = flags { testFlags = x } + set6 x flags = flags { benchmarkFlags = x } + set7 x flags = flags { projectFlags = x } + set8 x flags = flags { extraFlags = x } defaultNixStyleFlags :: a -> NixStyleFlags a -defaultNixStyleFlags x = ( mempty, mempty, mempty, mempty, mempty, mempty, x ) +defaultNixStyleFlags x = NixStyleFlags + { configFlags = mempty + , configExFlags = mempty + , installFlags = mempty + , haddockFlags = mempty + , testFlags = mempty + , benchmarkFlags = mempty + , projectFlags = defaultProjectFlags + , extraFlags = x + } diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Outdated.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Outdated.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Outdated.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Outdated.hs 2020-05-29 20:33:21.000000000 +0000 @@ -31,7 +31,6 @@ import Distribution.Package (PackageName, packageVersion) import Distribution.PackageDescription (allBuildDepends) import Distribution.PackageDescription.Configuration (finalizePD) -import Distribution.Pretty (prettyShow) import Distribution.Simple.Compiler (Compiler, compilerInfo) import Distribution.Simple.Setup (fromFlagOrDefault, flagToMaybe) @@ -42,7 +41,7 @@ (ComponentRequestedSpec(..)) import Distribution.Types.Dependency (Dependency(..)) -import Distribution.Verbosity (Verbosity, silent) +import Distribution.Verbosity (silent) import Distribution.Version (Version, VersionRange, LowerBound(..), UpperBound(..) ,asVersionIntervals, majorBoundVersion) @@ -53,8 +52,6 @@ import qualified Data.Set as S import System.Directory (getCurrentDirectory) -import System.Exit (exitFailure) -import Control.Exception (throwIO) -- | Entry point for the 'outdated' command. outdated :: Verbosity -> OutdatedFlags -> RepoContext diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/PackageHash.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/PackageHash.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/PackageHash.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/PackageHash.hs 2020-05-29 20:33:21.000000000 +0000 @@ -30,14 +30,13 @@ , PkgconfigName ) import Distribution.System ( Platform, OS(Windows, OSX), buildOS ) -import Distribution.PackageDescription - ( FlagAssignment, unFlagAssignment, showFlagValue ) +import Distribution.Types.Flag + ( FlagAssignment, showFlagAssignment ) import Distribution.Simple.Compiler ( CompilerId, OptimisationLevel(..), DebugInfoLevel(..) , ProfDetailLevel(..), showProfDetailLevel ) import Distribution.Simple.InstallDirs ( PathTemplate, fromPathTemplate ) -import Distribution.Pretty (prettyShow) import Distribution.Types.PkgconfigVersion (PkgconfigVersion) import Distribution.Client.HashValue import Distribution.Client.Types @@ -48,8 +47,6 @@ import qualified Data.Map as Map import qualified Data.Set as Set -import Data.Function (on) - ------------------------------- -- Calculating package hashes -- @@ -318,5 +315,3 @@ opt key def format value | value == def = Nothing | otherwise = entry key format value - - showFlagAssignment = unwords . map showFlagValue . sortBy (compare `on` fst) . unFlagAssignment diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/PackageUtils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/PackageUtils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/PackageUtils.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/PackageUtils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -14,6 +14,9 @@ externalBuildDepends, ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Package (packageName, packageVersion) import Distribution.PackageDescription (PackageDescription (..), enabledBuildDepends, libName) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ParseUtils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ParseUtils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ParseUtils.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ParseUtils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -54,7 +54,7 @@ import Distribution.Simple.Command ( OptionField ) -import Text.PrettyPrint ( (<+>), ($+$) ) +import Text.PrettyPrint ( ($+$) ) import qualified Data.Map as Map import qualified Text.PrettyPrint as Disp ( (<>), Doc, text, colon, vcat, empty, isEmpty, nest ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding/Types.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding/Types.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding/Types.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding/Types.hs 2020-05-29 20:33:21.000000000 +0000 @@ -22,6 +22,9 @@ BuildFailureReason(..), ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.Types (DocsResult, TestsResult) import Distribution.Client.FileMonitor (MonitorChangedReason(..)) @@ -29,11 +32,6 @@ import Distribution.InstalledPackageInfo (InstalledPackageInfo) import Distribution.Simple.LocalBuildInfo (ComponentName) -import Data.Map (Map) -import Data.Set (Set) -import Data.Typeable (Typeable) -import Control.Exception (Exception, SomeException) - ------------------------------------------------------------------------------ -- Pre-build status: result of the dry run diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectBuilding.hs 2020-05-29 20:33:21.000000000 +0000 @@ -90,8 +90,6 @@ import Distribution.Simple.Utils import Distribution.Version -import Distribution.Verbosity -import Distribution.Pretty import Distribution.Compat.Graph (IsNode(..)) import qualified Data.List.NonEmpty as NE @@ -100,8 +98,7 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS -import Control.Exception (Exception (..), Handler (..), SomeAsyncException, SomeException, assert, catches, handle, throwIO) -import Data.Function (on) +import Control.Exception (Handler (..), SomeAsyncException, assert, catches, handle) import System.Directory (canonicalizePath, createDirectoryIfMissing, doesDirectoryExist, doesFileExist, removeFile, renameDirectory) import System.FilePath (dropDrive, makeRelative, normalise, takeDirectory, (<.>), ()) import System.IO (IOMode (AppendMode), withFile) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Legacy.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Legacy.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Legacy.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Legacy.hs 2020-05-29 20:33:21.000000000 +0000 @@ -41,8 +41,6 @@ import Distribution.Solver.Types.ConstraintSource import Distribution.FieldGrammar -import Distribution.Pretty (Pretty (..), prettyShow) -import Distribution.Parsec (Parsec (..), simpleParsec) import Distribution.Package import Distribution.Types.SourceRepo (RepoType) import Distribution.PackageDescription @@ -58,6 +56,8 @@ , BenchmarkFlags(..), benchmarkOptions', defaultBenchmarkFlags , programDbPaths', splitArgs ) +import Distribution.Client.NixStyleOptions (NixStyleFlags (..)) +import Distribution.Client.ProjectFlags (ProjectFlags (..), projectFlagsOptions, defaultProjectFlags) import Distribution.Client.Setup ( GlobalFlags(..), globalCommand , ConfigExFlags(..), configureExOptions, defaultConfigExFlags @@ -150,7 +150,8 @@ legacyConfigureShFlags :: ConfigFlags, legacyConfigureExFlags :: ConfigExFlags, legacyInstallFlags :: InstallFlags, - legacyClientInstallFlags:: ClientInstallFlags + legacyClientInstallFlags:: ClientInstallFlags, + legacyProjectFlags :: ProjectFlags } deriving Generic instance Monoid LegacySharedConfig where @@ -173,15 +174,10 @@ -- 'LegacyProjectConfig' for an explanation. -- commandLineFlagsToProjectConfig :: GlobalFlags - -> ConfigFlags -> ConfigExFlags - -> InstallFlags -> ClientInstallFlags - -> HaddockFlags - -> TestFlags - -> BenchmarkFlags + -> NixStyleFlags a + -> ClientInstallFlags -> ProjectConfig -commandLineFlagsToProjectConfig globalFlags configFlags configExFlags - installFlags clientInstallFlags - haddockFlags testFlags benchmarkFlags = +commandLineFlagsToProjectConfig globalFlags NixStyleFlags {..} clientInstallFlags = mempty { projectConfigBuildOnly = convertLegacyBuildOnlyFlags globalFlags configFlags @@ -189,7 +185,7 @@ haddockFlags testFlags benchmarkFlags, projectConfigShared = convertLegacyAllPackageFlags globalFlags configFlags - configExFlags installFlags, + configExFlags installFlags projectFlags, projectConfigLocalPackages = localConfig, projectConfigAllPackages = allConfig } @@ -243,7 +239,8 @@ savedReportFlags = _, savedHaddockFlags = haddockFlags, savedTestFlags = testFlags, - savedBenchmarkFlags = benchmarkFlags + savedBenchmarkFlags = benchmarkFlags, + savedProjectFlags = projectFlags } = mempty { projectConfigBuildOnly = configBuildOnly, @@ -259,13 +256,14 @@ haddockFlags' = defaultHaddockFlags <> haddockFlags testFlags' = defaultTestFlags <> testFlags benchmarkFlags' = defaultBenchmarkFlags <> benchmarkFlags + projectFlags' = defaultProjectFlags <> projectFlags configAllPackages = convertLegacyPerPackageFlags configFlags installFlags' haddockFlags' testFlags' benchmarkFlags' configShared = convertLegacyAllPackageFlags globalFlags configFlags - configExFlags' installFlags' + configExFlags' installFlags' projectFlags' configBuildOnly = convertLegacyBuildOnlyFlags globalFlags configFlags installFlags' clientInstallFlags' @@ -285,7 +283,7 @@ legacyPackagesNamed, legacySharedConfig = LegacySharedConfig globalFlags configShFlags configExFlags installSharedFlags - clientInstallFlags, + clientInstallFlags projectFlags, legacyAllConfig, legacyLocalConfig = LegacyPackageConfig configFlags installPerPkgFlags haddockFlags testFlags benchmarkFlags, @@ -313,7 +311,7 @@ testFlags benchmarkFlags configPackagesShared= convertLegacyAllPackageFlags globalFlags (configFlags <> configShFlags) - configExFlags installSharedFlags + configExFlags installSharedFlags projectFlags configBuildOnly = convertLegacyBuildOnlyFlags globalFlags configShFlags installSharedFlags clientInstallFlags @@ -330,11 +328,14 @@ -- | Helper used by other conversion functions that returns the -- 'ProjectConfigShared' subset of the 'ProjectConfig'. -- -convertLegacyAllPackageFlags :: GlobalFlags -> ConfigFlags - -> ConfigExFlags -> InstallFlags - -> ProjectConfigShared -convertLegacyAllPackageFlags globalFlags configFlags - configExFlags installFlags = +convertLegacyAllPackageFlags + :: GlobalFlags + -> ConfigFlags + -> ConfigExFlags + -> InstallFlags + -> ProjectFlags + -> ProjectConfigShared +convertLegacyAllPackageFlags globalFlags configFlags configExFlags installFlags projectFlags = ProjectConfigShared{..} where GlobalFlags { @@ -369,7 +370,6 @@ } = configExFlags InstallFlags { - installProjectFileName = projectConfigProjectFile, installHaddockIndex = projectConfigHaddockIndex, --installReinstall = projectConfigReinstall, --installAvoidReinstalls = projectConfigAvoidReinstalls, @@ -389,7 +389,10 @@ installOnlyConstrained = projectConfigOnlyConstrained } = installFlags - + ProjectFlags + { flagProjectFileName = projectConfigProjectFile + , flagIgnoreProject = projectConfigIgnoreProject + } = projectFlags -- | Helper used by other conversion functions that returns the -- 'PackageConfig' subset of the 'ProjectConfig'. @@ -560,13 +563,14 @@ } } = - LegacySharedConfig { - legacyGlobalFlags = globalFlags, - legacyConfigureShFlags = configFlags, - legacyConfigureExFlags = configExFlags, - legacyInstallFlags = installFlags, - legacyClientInstallFlags = projectConfigClientInstallFlags - } + LegacySharedConfig + { legacyGlobalFlags = globalFlags + , legacyConfigureShFlags = configFlags + , legacyConfigureExFlags = configExFlags + , legacyInstallFlags = installFlags + , legacyClientInstallFlags = projectConfigClientInstallFlags + , legacyProjectFlags = projectFlags + } where globalFlags = GlobalFlags { globalVersion = mempty, @@ -635,10 +639,14 @@ installNumJobs = projectConfigNumJobs, installKeepGoing = projectConfigKeepGoing, installRunTests = mempty, - installOfflineMode = projectConfigOfflineMode, - installProjectFileName = projectConfigProjectFile + installOfflineMode = projectConfigOfflineMode } + projectFlags = ProjectFlags + { flagProjectFileName = projectConfigProjectFile + , flagIgnoreProject = projectConfigIgnoreProject + } + convertToLegacyAllPackageConfig :: ProjectConfig -> LegacyPackageConfig convertToLegacyAllPackageConfig @@ -933,9 +941,8 @@ legacySharedConfigFieldDescrs :: [FieldDescr LegacySharedConfig] -legacySharedConfigFieldDescrs = - - ( liftFields +legacySharedConfigFieldDescrs = concat + [ liftFields legacyGlobalFlags (\flags conf -> conf { legacyGlobalFlags = flags }) . addFields @@ -950,16 +957,16 @@ , "active-repositories" ] . commandOptionsToFields - ) (commandOptions (globalCommand []) ParseArgs) - ++ - ( liftFields + $ commandOptions (globalCommand []) ParseArgs + + , liftFields legacyConfigureShFlags (\flags conf -> conf { legacyConfigureShFlags = flags }) . filterFields ["verbose", "builddir" ] . commandOptionsToFields - ) (configureOptions ParseArgs) - ++ - ( liftFields + $ configureOptions ParseArgs + + , liftFields legacyConfigureExFlags (\flags conf -> conf { legacyConfigureExFlags = flags }) . addFields @@ -986,9 +993,9 @@ -- not "constraint" or "preference", we use our own plural ones above ] . commandOptionsToFields - ) (configureExOptions ParseArgs constraintSrc) - ++ - ( liftFields + $ configureExOptions ParseArgs constraintSrc + + , liftFields legacyInstallFlags (\flags conf -> conf { legacyInstallFlags = flags }) . addFields @@ -1010,13 +1017,21 @@ , "reject-unconstrained-dependencies", "index-state" ] . commandOptionsToFields - ) (installOptions ParseArgs) - ++ - ( liftFields + $ installOptions ParseArgs + + , liftFields legacyClientInstallFlags (\flags conf -> conf { legacyClientInstallFlags = flags }) . commandOptionsToFields - ) (clientInstallOptions ParseArgs) + $ clientInstallOptions ParseArgs + + , liftFields + legacyProjectFlags + (\flags conf -> conf { legacyProjectFlags = flags }) + . commandOptionsToFields + $ projectFlagsOptions ParseArgs + + ] where constraintSrc = ConstraintSourceProjectConfig "TODO" -- TODO: is a filepath diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Types.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Types.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Types.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig/Types.hs 2020-05-29 20:33:21.000000000 +0000 @@ -64,8 +64,6 @@ ( PathTemplate ) import Distribution.Utils.NubList ( NubList ) -import Distribution.Verbosity - ( Verbosity ) import qualified Data.Map as Map @@ -165,7 +163,7 @@ projectConfigDistDir :: Flag FilePath, projectConfigConfigFile :: Flag FilePath, projectConfigProjectFile :: Flag FilePath, - -- projectConfigIgnoreProjectFile :: Flag Bool, -- TODO + projectConfigIgnoreProject :: Flag Bool, projectConfigHcFlavor :: Flag CompilerFlavor, projectConfigHcPath :: Flag FilePath, projectConfigHcPkg :: Flag FilePath, diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectConfig.hs 2020-05-29 20:33:21.000000000 +0000 @@ -29,7 +29,6 @@ readGlobalConfig, readProjectLocalFreezeConfig, withProjectOrGlobalConfig, - withProjectOrGlobalConfigIgn, writeProjectLocalExtraConfig, writeProjectLocalFreezeConfig, writeProjectConfigFile, @@ -100,7 +99,6 @@ ( parseGenericPackageDescription ) import Distribution.Fields ( runParseResult, PError, PWarning, showPWarning) -import Distribution.Pretty (prettyShow) import Distribution.Types.SourceRepo ( RepoType(..) ) import Distribution.Client.Types.SourceRepo @@ -124,10 +122,9 @@ import Distribution.Utils.NubList ( fromNubList ) import Distribution.Verbosity - ( Verbosity, modifyVerbosity, verbose ) + ( modifyVerbosity, verbose ) import Distribution.Version ( Version ) -import Distribution.Parsec (simpleParsec) import qualified Distribution.Deprecated.ParseUtils as OldParser ( ParseResult(..), locatedErrorMsg, showPWarning ) @@ -136,10 +133,7 @@ import qualified Distribution.Client.Tar as Tar import qualified Distribution.Client.GZipUtils as GZipUtils -import Control.Monad import Control.Monad.Trans (liftIO) -import Control.Exception -import Data.Either import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS import qualified Data.Map as Map @@ -455,30 +449,26 @@ renderBadProjectRoot (BadProjectRootExplicitFile projectFile) = "The given project file '" ++ projectFile ++ "' does not exist." --- | Like 'withProjectOrGlobalConfig', with an additional boolean --- which tells to ignore local project. --- --- Used to implement -z / --ignore-project behaviour --- -withProjectOrGlobalConfigIgn - :: Bool -- ^ whether to ignore local project - -> Verbosity - -> Flag FilePath -- ^ global config file - -> IO a - -> (ProjectConfig -> IO a) +withProjectOrGlobalConfig + :: Verbosity -- ^ verbosity + -> Flag Bool -- ^ whether to ignore local project + -> Flag FilePath -- ^ @--cabal-config@ + -> IO a -- ^ with project + -> (ProjectConfig -> IO a) -- ^ without projet -> IO a -withProjectOrGlobalConfigIgn True verbosity gcf _with without = do +withProjectOrGlobalConfig verbosity (Flag True) gcf _with without = do globalConfig <- runRebuild "" $ readGlobalConfig verbosity gcf without globalConfig -withProjectOrGlobalConfigIgn False verbosity gcf with without = - withProjectOrGlobalConfig verbosity gcf with without +withProjectOrGlobalConfig verbosity _ignorePrj gcf with without = + withProjectOrGlobalConfig' verbosity gcf with without -withProjectOrGlobalConfig :: Verbosity - -> Flag FilePath - -> IO a - -> (ProjectConfig -> IO a) - -> IO a -withProjectOrGlobalConfig verbosity globalConfigFlag with without = do +withProjectOrGlobalConfig' + :: Verbosity + -> Flag FilePath + -> IO a + -> (ProjectConfig -> IO a) + -> IO a +withProjectOrGlobalConfig' verbosity globalConfigFlag with without = do globalConfig <- runRebuild "" $ readGlobalConfig verbosity globalConfigFlag let @@ -814,7 +804,7 @@ where findPackageLocations required pkglocstr = do (problems, pkglocs) <- - partitionEithers <$> mapM (findPackageLocation required) pkglocstr + partitionEithers <$> traverse (findPackageLocation required) pkglocstr unless (null problems) $ liftIO $ throwIO $ BadPackageLocations projectConfigProvenance problems return (concat pkglocs) @@ -886,7 +876,7 @@ _ -> do (failures, pkglocs) <- partitionEithers <$> - mapM checkFilePackageMatch matches + traverse checkFilePackageMatch matches return $! case (failures, pkglocs) of ([failure], []) | isJust (isTrivialFilePathGlob glob) -> Left (BadPackageLocationFile failure) @@ -994,13 +984,13 @@ pkgLocations = do pkgsLocalDirectory <- - sequence + sequenceA [ readSourcePackageLocalDirectory verbosity dir cabalFile | location <- pkgLocations , (dir, cabalFile) <- projectPackageLocal location ] pkgsLocalTarball <- - sequence + sequenceA [ readSourcePackageLocalTarball verbosity path | ProjectPackageLocalTarball path <- pkgLocations ] @@ -1008,7 +998,7 @@ getTransport <- delayInitSharedResource $ configureTransport verbosity progPathExtra preferredHttpTransport - sequence + sequenceA [ fetchAndReadSourcePackageRemoteTarball verbosity distDirLayout getTransport uri | ProjectPackageRemoteTarball uri <- pkgLocations ] @@ -1152,7 +1142,7 @@ let vcs = Map.findWithDefault (error $ "Unknown VCS: " ++ prettyShow repoType) repoType knownVCSs in configureVCS verbosity {-progPathExtra-} vcs - concat <$> sequence + concat <$> sequenceA [ rerunIfChanged verbosity monitor repoGroup' $ do vcs' <- getConfiguredVCS repoType syncRepoGroupAndReadSourcePackages vcs' pathStem repoGroup' @@ -1183,7 +1173,7 @@ -- But for reading we go through each 'SourceRepo' including its subdir -- value and have to know which path each one ended up in. - sequence + sequenceA [ readPackageFromSourceRepo repoWithSubdir repoPath | (_, reposWithSubdir, repoPath) <- repoGroupWithPaths , repoWithSubdir <- NE.toList reposWithSubdir ] diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectFlags.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectFlags.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectFlags.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectFlags.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,4 +1,4 @@ -{-# LANGUAGE MultiWayIf #-} +{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} module Distribution.Client.ProjectFlags ( ProjectFlags(..), @@ -10,22 +10,34 @@ import Prelude () import Distribution.ReadE (succeedReadE) -import Distribution.Simple.Command (OptionField, option, reqArg) -import Distribution.Simple.Setup (Flag (..), toFlag, trueArg, flagToList) +import Distribution.Simple.Command (MkOptDescr, OptionField, ShowOrParseArgs (..), boolOpt', option, reqArg) +import Distribution.Simple.Setup (Flag (..), flagToList, flagToMaybe, toFlag, trueArg) data ProjectFlags = ProjectFlags { flagProjectFileName :: Flag FilePath + -- ^ The cabal project file name; defaults to @cabal.project@. + -- The name itself denotes the cabal project file name, but it also + -- is the base of auxiliary project files, such as + -- @cabal.project.local@ and @cabal.project.freeze@ which are also + -- read and written out in some cases. If the path is not found + -- in the current working directory, we will successively probe + -- relative to parent directories until this name is found. + , flagIgnoreProject :: Flag Bool + -- ^ Whether to ignore the local project (i.e. don't search for cabal.project) + -- The exact interpretation might be slightly different per command. } + deriving (Show, Generic) defaultProjectFlags :: ProjectFlags defaultProjectFlags = ProjectFlags { flagProjectFileName = mempty , flagIgnoreProject = toFlag False + -- Should we use 'Last' here? } -projectFlagsOptions :: [OptionField ProjectFlags] -projectFlagsOptions = +projectFlagsOptions :: ShowOrParseArgs -> [OptionField ProjectFlags] +projectFlagsOptions showOrParseArgs = [ option [] ["project-file"] "Set the name of the cabal.project file to search for in parent directories" flagProjectFileName (\pf flags -> flags { flagProjectFileName = pf }) @@ -33,5 +45,16 @@ , option ['z'] ["ignore-project"] "Ignore local project configuration" flagIgnoreProject (\v flags -> flags { flagIgnoreProject = v }) - trueArg + (yesNoOpt showOrParseArgs) ] + +instance Monoid ProjectFlags where + mempty = gmempty + mappend = (<>) + +instance Semigroup ProjectFlags where + (<>) = gmappend + +yesNoOpt :: ShowOrParseArgs -> MkOptDescr (b -> Flag Bool) (Flag Bool -> b -> b) b +yesNoOpt ShowArgs sf lf = trueArg sf lf +yesNoOpt _ sf lf = boolOpt' flagToMaybe Flag (sf, lf) ([], map ("no-" ++) lf) sf lf diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectOrchestration.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectOrchestration.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectOrchestration.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectOrchestration.hs 2020-05-29 20:33:21.000000000 +0000 @@ -68,7 +68,6 @@ ComponentKind(..), ComponentTarget(..), SubComponentTarget(..), - TargetProblemCommon(..), selectComponentTargetBasic, distinctTargetComponents, -- ** Utils for selecting targets @@ -117,6 +116,8 @@ import Distribution.Client.ProjectPlanOutput import Distribution.Client.RebuildMonad ( runRebuild ) +import Distribution.Client.TargetProblem + ( TargetProblem (..) ) import Distribution.Client.Types ( GenericReadyPackage(..), UnresolvedSourcePackage , PackageSpecifier(..) @@ -142,9 +143,8 @@ import Distribution.Solver.Types.OptionalStanza import Distribution.Package -import Distribution.PackageDescription - ( FlagAssignment, unFlagAssignment, showFlagValue - , diffFlagAssignment ) +import Distribution.Types.Flag + ( FlagAssignment, showFlagAssignment, diffFlagAssignment ) import Distribution.Simple.LocalBuildInfo ( ComponentName(..), pkgComponents ) import Distribution.Simple.Flag @@ -158,19 +158,14 @@ import Distribution.Verbosity import Distribution.Version ( mkVersion ) -import Distribution.Pretty - ( prettyShow ) import Distribution.Simple.Compiler ( compilerCompatVersion, showCompilerId , OptimisationLevel(..)) -import qualified Data.Monoid as Mon import qualified Data.List.NonEmpty as NE import qualified Data.Set as Set import qualified Data.Map as Map -import Data.Either -import Control.Exception (Exception(..), throwIO, assert) -import System.Exit (ExitCode(..), exitFailure) +import Control.Exception (assert) #ifdef MIN_VERSION_unix import System.Posix.Signals (sigKILL, sigSEGV) #endif @@ -518,16 +513,15 @@ resolveTargets :: forall err. (forall k. TargetSelector -> [AvailableTarget k] - -> Either err [k]) + -> Either (TargetProblem err) [k]) -> (forall k. SubComponentTarget -> AvailableTarget k - -> Either err k ) - -> (TargetProblemCommon -> err) + -> Either (TargetProblem err) k ) -> ElaboratedInstallPlan -> Maybe (SourcePackageDb) -> [TargetSelector] - -> Either [err] TargetsMap -resolveTargets selectPackageTargets selectComponentTarget liftProblem + -> Either [TargetProblem err] TargetsMap +resolveTargets selectPackageTargets selectComponentTarget installPlan mPkgDb = fmap mkTargetsMap . either (Left . toList) Right @@ -545,7 +539,7 @@ AvailableTargetIndexes{..} = availableTargetIndexes installPlan - checkTarget :: TargetSelector -> Either err [(UnitId, ComponentTarget)] + checkTarget :: TargetSelector -> Either (TargetProblem err) [(UnitId, ComponentTarget)] -- We can ask to build any whole package, project-local or a dependency checkTarget bt@(TargetPackage _ [pkgid] mkfilter) @@ -555,7 +549,7 @@ $ selectPackageTargets bt ats | otherwise - = Left (liftProblem (TargetProblemNoSuchPackage pkgid)) + = Left (TargetProblemNoSuchPackage pkgid) checkTarget (TargetPackage _ _ _) = error "TODO: add support for multiple packages in a directory" @@ -581,10 +575,10 @@ $ selectComponentTargets subtarget ats | Map.member pkgid availableTargetsByPackageId - = Left (liftProblem (TargetProblemNoSuchComponent pkgid cname)) + = Left (TargetProblemNoSuchComponent pkgid cname) | otherwise - = Left (liftProblem (TargetProblemNoSuchPackage pkgid)) + = Left (TargetProblemNoSuchPackage pkgid) checkTarget (TargetComponentUnknown pkgname ecname subtarget) | Just ats <- case ecname of @@ -598,10 +592,10 @@ $ selectComponentTargets subtarget ats | Map.member pkgname availableTargetsByPackageName - = Left (liftProblem (TargetProblemUnknownComponent pkgname ecname)) + = Left (TargetProblemUnknownComponent pkgname ecname) | otherwise - = Left (liftProblem (TargetNotInProject pkgname)) + = Left (TargetNotInProject pkgname) checkTarget bt@(TargetPackageNamed pkgname mkfilter) | Just ats <- fmap (maybe id filterTargetsKind mkfilter) @@ -613,10 +607,10 @@ | Just SourcePackageDb{ packageIndex } <- mPkgDb , let pkg = lookupPackageName packageIndex pkgname , not (null pkg) - = Left (liftProblem (TargetAvailableInIndex pkgname)) + = Left (TargetAvailableInIndex pkgname) | otherwise - = Left (liftProblem (TargetNotInProject pkgname)) + = Left (TargetNotInProject pkgname) componentTargets :: SubComponentTarget -> [(b, ComponentName)] @@ -626,7 +620,7 @@ selectComponentTargets :: SubComponentTarget -> [AvailableTarget k] - -> Either err [k] + -> Either (TargetProblem err) [k] selectComponentTargets subtarget = either (Left . NE.head) Right . checkErrors @@ -765,7 +759,7 @@ -- selectComponentTargetBasic :: SubComponentTarget -> AvailableTarget k - -> Either TargetProblemCommon k + -> Either (TargetProblem a) k selectComponentTargetBasic subtarget AvailableTarget { availableTargetPackageId = pkgid, @@ -788,32 +782,6 @@ TargetBuildable targetKey _ -> Right targetKey -data TargetProblemCommon - = TargetNotInProject PackageName - | TargetAvailableInIndex PackageName - - | TargetComponentNotProjectLocal - PackageId ComponentName SubComponentTarget - - | TargetComponentNotBuildable - PackageId ComponentName SubComponentTarget - - | TargetOptionalStanzaDisabledByUser - PackageId ComponentName SubComponentTarget - - | TargetOptionalStanzaDisabledBySolver - PackageId ComponentName SubComponentTarget - - | TargetProblemUnknownComponent - PackageName (Either UnqualComponentName ComponentName) - - -- The target matching stuff only returns packages local to the project, - -- so these lookups should never fail, but if 'resolveTargets' is called - -- directly then of course it can. - | TargetProblemNoSuchPackage PackageId - | TargetProblemNoSuchComponent PackageId ComponentName - deriving (Eq, Show) - -- | Wrapper around 'ProjectPlanning.pruneInstallPlanToTargets' that adjusts -- for the extra unneeded info in the 'TargetsMap'. -- @@ -884,21 +852,20 @@ | otherwise = "will" showPkgAndReason :: ElaboratedReadyPackage -> String - showPkgAndReason (ReadyPackage elab) = - " - " ++ - (if verbosity >= deafening + showPkgAndReason (ReadyPackage elab) = unwords $ filter (not . null) $ + [ " -" + , if verbosity >= deafening then prettyShow (installedUnitId elab) else prettyShow (packageId elab) - ) ++ - (case elabPkgOrComp elab of + , case elabPkgOrComp elab of ElabPackage pkg -> showTargets elab ++ ifVerbose (showStanzas pkg) ElabComponent comp -> - " (" ++ showComp elab comp ++ ")" - ) ++ - showFlagAssignment (nonDefaultFlags elab) ++ - showConfigureFlags elab ++ - let buildStatus = pkgsBuildStatus Map.! installedUnitId elab in - " (" ++ showBuildStatus buildStatus ++ ")" + "(" ++ showComp elab comp ++ ")" + , showFlagAssignment (nonDefaultFlags elab) + , showConfigureFlags elab + , let buildStatus = pkgsBuildStatus Map.! installedUnitId elab + in "(" ++ showBuildStatus buildStatus ++ ")" + ] showComp elab comp = maybe "custom" prettyShow (compComponentName comp) ++ @@ -923,14 +890,11 @@ showTargets elab | null (elabBuildTargets elab) = "" | otherwise - = " (" + = "(" ++ intercalate ", " [ showComponentTarget (packageId elab) t | t <- elabBuildTargets elab ] ++ ")" - showFlagAssignment :: FlagAssignment -> String - showFlagAssignment = concatMap ((' ' :) . showFlagValue) . unFlagAssignment - showConfigureFlags elab = let fullConfigureFlags = setupHsConfigureFlags @@ -949,7 +913,7 @@ computeEffectiveProfiling fullConfigureFlags partialConfigureFlags - = Mon.mempty { + = mempty { configProf = nubFlag False (configProf fullConfigureFlags), configProfExe = diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning/Types.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning/Types.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning/Types.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning/Types.hs 2020-05-29 20:33:21.000000000 +0000 @@ -78,8 +78,7 @@ import Distribution.Backpack import Distribution.Backpack.ModuleShape -import Distribution.Pretty -import Distribution.Verbosity +import Distribution.Verbosity (normal) import Distribution.Types.ComponentRequestedSpec import Distribution.Types.PkgconfigVersion import Distribution.Types.PackageDescription (PackageDescription(..)) @@ -108,7 +107,6 @@ import qualified Data.Map as Map import qualified Data.ByteString.Lazy as LBS import qualified Data.Monoid as Mon -import Control.Monad (guard) import System.FilePath (()) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanning.hs 2020-05-29 20:33:21.000000000 +0000 @@ -153,24 +153,18 @@ import Distribution.Simple.Utils import Distribution.Version -import Distribution.Verbosity -import Distribution.Pretty (pretty, prettyShow) import qualified Distribution.Compat.Graph as Graph import Distribution.Compat.Graph(IsNode(..)) -import Text.PrettyPrint hiding ((<>)) +import Text.PrettyPrint (text, hang, quotes, colon, vcat, ($$), fsep, punctuate, comma) import qualified Text.PrettyPrint as Disp import qualified Data.Map as Map import qualified Data.Set as Set -import Control.Monad -import qualified Data.Traversable as T import Control.Monad.State as State -import Control.Exception +import Control.Exception (assert) import Data.List (groupBy) import qualified Data.List.NonEmpty as NE -import Data.Either -import Data.Function import System.FilePath ------------------------------------------------------------------------------ @@ -774,7 +768,7 @@ sourcePkgDbWithTIS <- IndexUtils.getSourcePackagesAtIndexState verbosity repoctx idxState activeRepos return (sourcePkgDbWithTIS, repoContextRepos repoctx) - mapM_ needIfExists + traverse_ needIfExists . IndexUtils.getSourcePackagesMonitorFiles $ repos return sourcePkgDbWithTIS @@ -785,7 +779,7 @@ dirs <- liftIO $ getPkgConfigDbDirs verbosity progdb -- Just monitor the dirs so we'll notice new .pc files. -- Alternatively we could monitor all the .pc files too. - mapM_ monitorDirectoryStatus dirs + traverse_ monitorDirectoryStatus dirs liftIO $ readPkgConfigDb verbosity progdb @@ -2162,7 +2156,7 @@ = case planpkg of InstallPlan.Configured (elab0@ElaboratedConfiguredPackage { elabPkgOrComp = ElabComponent comp }) -> do - deps <- mapM (substUnitId insts) + deps <- traverse (substUnitId insts) (compLinkedLibDependencies comp) let getDep (Module dep_uid _) = [dep_uid] elab1 = elab0 { @@ -2198,7 +2192,7 @@ substSubst :: Map ModuleName Module -> Map ModuleName OpenModule -> InstM (Map ModuleName Module) - substSubst subst insts = T.mapM (substModule subst) insts + substSubst subst insts = traverse (substModule subst) insts substModule :: Map ModuleName Module -> OpenModule -> InstM Module substModule subst (OpenModuleVar mod_name) @@ -2235,7 +2229,7 @@ -- we initially created the ElaboratedPlanPackage because -- we have no way of actually refiying the UnitId into a -- DefiniteUnitId (that's what substUnitId does!) - new_deps <- forM (compLinkedLibDependencies elab_comp) $ \uid -> + new_deps <- for (compLinkedLibDependencies elab_comp) $ \uid -> if Set.null (openUnitIdFreeHoles uid) then fmap DefiniteUnitId (substUnitId Map.empty uid) else return uid @@ -2257,7 +2251,7 @@ ready_map = execState work Map.empty - work = forM_ pkgs $ \pkg -> + work = for_ pkgs $ \pkg -> case pkg of InstallPlan.Configured elab | not (Map.null (elabLinkedInstantiatedWith elab)) @@ -3418,9 +3412,7 @@ configUserInstall = mempty -- don't rely on defaults configPrograms_ = mempty -- never use, shouldn't exist configUseResponseFiles = mempty - -- TODO set to true when the solver can prevent private-library-deps by itself - -- (issue #6039) - configAllowDependingOnPrivateLibs = mempty + configAllowDependingOnPrivateLibs = Flag $ not $ libraryVisibilitySupported pkgConfigCompiler setupHsConfigureArgs :: ElaboratedConfiguredPackage -> [String] diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanOutput.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanOutput.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanOutput.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/ProjectPlanOutput.hs 2020-05-29 20:33:21.000000000 +0000 @@ -44,7 +44,6 @@ ( getImplInfo, GhcImplInfo(supportsPkgEnvFiles) , GhcEnvironmentFileEntry(..), simpleGhcEnvironmentFile , writeGhcEnvironmentFile ) -import Distribution.Pretty (Pretty, prettyShow) import qualified Distribution.Compat.Graph as Graph import Distribution.Compat.Graph (Graph, Node) import qualified Distribution.Compat.Binary as Binary diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/RebuildMonad.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/RebuildMonad.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/RebuildMonad.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/RebuildMonad.hs 2020-05-29 20:33:21.000000000 +0000 @@ -63,7 +63,6 @@ import qualified Distribution.Client.Glob as Glob (matchFileGlob) import Distribution.Simple.Utils (debug) -import Distribution.Verbosity (Verbosity) import qualified Data.Map.Strict as Map import Control.Monad.State as State diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Reconfigure.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Reconfigure.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Reconfigure.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Reconfigure.hs 2020-05-29 20:33:21.000000000 +0000 @@ -5,8 +5,6 @@ import Data.Monoid ( Any(..) ) import System.Directory ( doesFileExist ) -import Distribution.Verbosity - import Distribution.Simple.Configure ( localBuildInfoFile ) import Distribution.Simple.Setup ( Flag, flagToMaybe, toFlag ) import Distribution.Simple.Utils @@ -126,11 +124,11 @@ <> checkDist <> checkOutdated <> check - (Any force, flags@(configFlags, _)) <- runCheck checks mempty savedFlags + (Any frc, flags@(configFlags, _)) <- runCheck checks mempty savedFlags let config' = updateInstallDirs (configUserInstall configFlags) config - when force $ configureAction flags extraArgs globalFlags + when frc $ configureAction flags extraArgs globalFlags return config' where diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Run.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Run.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Run.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Run.hs 2020-05-29 20:33:21.000000000 +0000 @@ -34,8 +34,6 @@ rawSystemExitWithEnv, addLibraryPath) import Distribution.System (Platform (..)) -import Distribution.Verbosity (Verbosity) -import Distribution.Pretty (prettyShow) import qualified Distribution.Simple.GHCJS as GHCJS diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox/PackageEnvironment.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox/PackageEnvironment.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox/PackageEnvironment.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox/PackageEnvironment.hs 2020-05-29 20:33:21.000000000 +0000 @@ -22,6 +22,9 @@ , userPackageEnvironmentFile ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Client.Config ( SavedConfig(..) , configFieldDescriptions , haddockFlagsFields @@ -44,23 +47,13 @@ , readFields , showPWarning , syntaxError, warning ) -import Distribution.Verbosity ( Verbosity ) -import Control.Monad ( foldM, unless ) -import Data.List ( partition, sortBy ) -import Data.Ord ( comparing ) -import Distribution.Compat.Exception ( catchIO ) -import Distribution.Compat.Semigroup import System.Directory ( doesFileExist ) import System.FilePath ( () ) import System.IO.Error ( isDoesNotExistError ) import Text.PrettyPrint ( ($+$) ) -import Distribution.Parsec (Parsec (..)) -import Distribution.Pretty (Pretty (..)) import qualified Text.PrettyPrint as Disp import qualified Distribution.Deprecated.ParseUtils as ParseUtils ( Field(..) ) -import GHC.Generics ( Generic ) - -- -- * Configuration saved in the package environment file diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Sandbox.hs 2020-05-29 20:33:21.000000000 +0000 @@ -42,7 +42,6 @@ import Distribution.Simple.Setup ( Flag(..) , fromFlagOrDefault, flagToMaybe ) import Distribution.System ( Platform ) -import Distribution.Verbosity ( Verbosity ) import System.Directory ( getCurrentDirectory ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SavedFlags.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SavedFlags.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SavedFlags.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SavedFlags.hs 2020-05-29 20:33:21.000000000 +0000 @@ -5,17 +5,15 @@ , readSavedArgs, writeSavedArgs ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Simple.Command import Distribution.Simple.UserHooks ( Args ) import Distribution.Simple.Utils ( createDirectoryIfMissingVerbose, unintersperse ) import Distribution.Verbosity -import Control.Exception ( Exception, throwIO ) -import Control.Monad ( liftM ) -import Data.List ( intercalate ) -import Data.Maybe ( fromMaybe ) -import Data.Typeable import System.Directory ( doesFileExist ) import System.FilePath ( takeDirectory ) @@ -41,7 +39,7 @@ readSavedArgs path = do exists <- doesFileExist path if exists - then liftM (Just . unintersperse '\0') (readFile path) + then fmap (Just . unintersperse '\0') (readFile path) else return Nothing @@ -49,7 +47,7 @@ -- Returns the default flags if the file does not exist. readCommandFlags :: FilePath -> CommandUI flags -> IO flags readCommandFlags path command = do - savedArgs <- liftM (fromMaybe []) (readSavedArgs path) + savedArgs <- fmap (fromMaybe []) (readSavedArgs path) case (commandParseArgs command True savedArgs) of CommandHelp _ -> throwIO (SavedArgsErrorHelp savedArgs) CommandList _ -> throwIO (SavedArgsErrorList savedArgs) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Security/DNS.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Security/DNS.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Security/DNS.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Security/DNS.hs 2020-05-29 20:33:21.000000000 +0000 @@ -7,12 +7,8 @@ import Prelude () import Distribution.Client.Compat.Prelude import Network.URI (URI(..), URIAuth(..), parseURI) -import Distribution.Verbosity -import Control.Monad -import Control.DeepSeq (force) -import Control.Exception (SomeException, evaluate, try) +import Control.Exception (try) import Distribution.Simple.Utils -import Distribution.Compat.Exception (displayException) #if defined(MIN_VERSION_resolv) || defined(MIN_VERSION_windns) import Network.DNS (queryTXT, Name(..), CharStr(..)) @@ -70,7 +66,7 @@ then warn verbosity ("No mirrors found for " ++ show repoUri) else do info verbosity ("located " ++ show (length mirrors) ++ " mirrors for " ++ show repoUri ++ " :") - forM_ mirrors $ \url -> info verbosity ("- " ++ show url) + for_ mirrors $ \url -> info verbosity ("- " ++ show url) return mirrors @@ -117,7 +113,7 @@ then warn verbosity ("No mirrors found for " ++ show repoUri) else do info verbosity ("located " ++ show (length mirrors) ++ " mirrors for " ++ show repoUri ++ " :") - forM_ mirrors $ \url -> info verbosity ("- " ++ show url) + for_ mirrors $ \url -> info verbosity ("- " ++ show url) return mirrors diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Security/HTTP.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Security/HTTP.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Security/HTTP.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Security/HTTP.hs 2020-05-29 20:33:21.000000000 +0000 @@ -8,13 +8,10 @@ -- | Implementation of 'HttpLib' using cabal-install's own 'HttpTransport' module Distribution.Client.Security.HTTP (HttpLib, transportAdapter) where +import Distribution.Solver.Compat.Prelude +import Prelude () + -- stdlibs -import Control.Exception - ( Exception(..), IOException ) -import Data.List - ( intercalate ) -import Data.Typeable - ( Typeable ) import System.Directory ( getTemporaryDirectory ) import Network.URI @@ -31,10 +28,11 @@ ( withTempFileName ) -- hackage-security -import Hackage.Security.Client -import Hackage.Security.Client.Repository.HttpLib -import Hackage.Security.Util.Checked -import Hackage.Security.Util.Pretty +import Hackage.Security.Client.Repository.HttpLib (HttpLib (..)) +import qualified Hackage.Security.Client as HC +import qualified Hackage.Security.Client.Repository.HttpLib as HC +import qualified Hackage.Security.Util.Checked as HC +import qualified Hackage.Security.Util.Pretty as HC {------------------------------------------------------------------------------- 'HttpLib' implementation @@ -62,49 +60,50 @@ transportAdapter verbosity getTransport = HttpLib{ httpGet = \headers uri callback -> do transport <- getTransport - get verbosity transport headers uri callback + httpGetImpl verbosity transport headers uri callback , httpGetRange = \headers uri range callback -> do transport <- getTransport getRange verbosity transport headers uri range callback } -get :: Throws SomeRemoteError +httpGetImpl + :: HC.Throws HC.SomeRemoteError => Verbosity -> HttpTransport - -> [HttpRequestHeader] -> URI - -> ([HttpResponseHeader] -> BodyReader -> IO a) + -> [HC.HttpRequestHeader] -> URI + -> ([HC.HttpResponseHeader] -> HC.BodyReader -> IO a) -> IO a -get verbosity transport reqHeaders uri callback = wrapCustomEx $ do +httpGetImpl verbosity transport reqHeaders uri callback = wrapCustomEx $ do get' verbosity transport reqHeaders uri Nothing $ \code respHeaders br -> case code of 200 -> callback respHeaders br - _ -> throwChecked $ UnexpectedResponse uri code + _ -> HC.throwChecked $ UnexpectedResponse uri code -getRange :: Throws SomeRemoteError +getRange :: HC.Throws HC.SomeRemoteError => Verbosity -> HttpTransport - -> [HttpRequestHeader] -> URI -> (Int, Int) - -> (HttpStatus -> [HttpResponseHeader] -> BodyReader -> IO a) + -> [HC.HttpRequestHeader] -> URI -> (Int, Int) + -> (HC.HttpStatus -> [HC.HttpResponseHeader] -> HC.BodyReader -> IO a) -> IO a getRange verbosity transport reqHeaders uri range callback = wrapCustomEx $ do get' verbosity transport reqHeaders uri (Just range) $ \code respHeaders br -> case code of - 200 -> callback HttpStatus200OK respHeaders br - 206 -> callback HttpStatus206PartialContent respHeaders br - _ -> throwChecked $ UnexpectedResponse uri code + 200 -> callback HC.HttpStatus200OK respHeaders br + 206 -> callback HC.HttpStatus206PartialContent respHeaders br + _ -> HC.throwChecked $ UnexpectedResponse uri code -- | Internal generalization of 'get' and 'getRange' get' :: Verbosity -> HttpTransport - -> [HttpRequestHeader] -> URI -> Maybe (Int, Int) - -> (HttpCode -> [HttpResponseHeader] -> BodyReader -> IO a) + -> [HC.HttpRequestHeader] -> URI -> Maybe (Int, Int) + -> (HttpCode -> [HC.HttpResponseHeader] -> HC.BodyReader -> IO a) -> IO a get' verbosity transport reqHeaders uri mRange callback = do tempDir <- getTemporaryDirectory withTempFileName tempDir "transportAdapterGet" $ \temp -> do (code, _etag) <- getHttp transport verbosity uri Nothing temp reqHeaders' - br <- bodyReaderFromBS =<< BS.L.readFile temp - callback code [HttpResponseAcceptRangesBytes] br + br <- HC.bodyReaderFromBS =<< BS.L.readFile temp + callback code [HC.HttpResponseAcceptRangesBytes] br where reqHeaders' = mkReqHeaders reqHeaders mRange @@ -119,18 +118,18 @@ -- See rangeHeader = "bytes=" ++ show from ++ "-" ++ show (to - 1) -mkReqHeaders :: [HttpRequestHeader] -> Maybe (Int, Int) -> [HTTP.Header] +mkReqHeaders :: [HC.HttpRequestHeader] -> Maybe (Int, Int) -> [HTTP.Header] mkReqHeaders reqHeaders mRange = concat [ tr [] reqHeaders , [mkRangeHeader fr to | Just (fr, to) <- [mRange]] ] where - tr :: [(HTTP.HeaderName, [String])] -> [HttpRequestHeader] -> [HTTP.Header] + tr :: [(HTTP.HeaderName, [String])] -> [HC.HttpRequestHeader] -> [HTTP.Header] tr acc [] = concatMap finalize acc - tr acc (HttpRequestMaxAge0:os) = + tr acc (HC.HttpRequestMaxAge0:os) = tr (insert HTTP.HdrCacheControl ["max-age=0"] acc) os - tr acc (HttpRequestNoTransform:os) = + tr acc (HC.HttpRequestNoTransform:os) = tr (insert HTTP.HdrCacheControl ["no-transform"] acc) os -- Some headers are comma-separated, others need multiple headers for @@ -157,24 +156,24 @@ data UnexpectedResponse = UnexpectedResponse URI Int deriving (Typeable) -instance Pretty UnexpectedResponse where +instance HC.Pretty UnexpectedResponse where pretty (UnexpectedResponse uri code) = "Unexpected response " ++ show code ++ " for " ++ show uri #if MIN_VERSION_base(4,8,0) deriving instance Show UnexpectedResponse -instance Exception UnexpectedResponse where displayException = pretty +instance Exception UnexpectedResponse where displayException = HC.pretty #else -instance Show UnexpectedResponse where show = pretty +instance Show UnexpectedResponse where show = HC.pretty instance Exception UnexpectedResponse #endif -wrapCustomEx :: ( ( Throws UnexpectedResponse - , Throws IOException +wrapCustomEx :: ( ( HC.Throws UnexpectedResponse + , HC.Throws IOException ) => IO a) - -> (Throws SomeRemoteError => IO a) -wrapCustomEx act = handleChecked (\(ex :: UnexpectedResponse) -> go ex) - $ handleChecked (\(ex :: IOException) -> go ex) + -> (HC.Throws HC.SomeRemoteError => IO a) +wrapCustomEx act = HC.handleChecked (\(ex :: UnexpectedResponse) -> go ex) + $ HC.handleChecked (\(ex :: IOException) -> go ex) $ act where - go ex = throwChecked (SomeRemoteError ex) + go ex = HC.throwChecked (HC.SomeRemoteError ex) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Setup.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Setup.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Setup.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Setup.hs 2020-05-29 20:33:21.000000000 +0000 @@ -79,8 +79,6 @@ ( UserConstraint, readUserConstraint ) import Distribution.Utils.NubList ( NubList, toNubList, fromNubList) -import Distribution.Parsec (CabalParsing, simpleParsec, parsec, eitherParsec) -import Distribution.Pretty (prettyShow) import Distribution.Solver.Types.ConstraintSource import Distribution.Solver.Types.Settings @@ -126,7 +124,7 @@ ( ReadE(..), succeedReadE, parsecToReadE ) import qualified Distribution.Compat.CharParsing as P import Distribution.Verbosity - ( Verbosity, lessVerbose, normal, verboseNoFlags, verboseNoTimestamp ) + ( lessVerbose, normal, verboseNoFlags, verboseNoTimestamp ) import Distribution.Simple.Utils ( wrapText ) import Distribution.Client.GlobalFlags @@ -514,6 +512,8 @@ convertToLegacyInternalDep (GivenComponent pn LMainLibName cid) = Just $ GivenComponent pn LMainLibName cid in catMaybes $ convertToLegacyInternalDep <$> configDependencies flags + -- Cabal < 2.5 doesn't know about '--allow-depending-on-private-libs'. + , configAllowDependingOnPrivateLibs = NoFlag -- Cabal < 2.5 doesn't know about '--enable/disable-executable-static'. , configFullyStaticExe = NoFlag } @@ -623,7 +623,7 @@ configWriteGhcEnvironmentFilesPolicy :: Flag WriteGhcEnvironmentFilesPolicy } - deriving (Eq, Generic) + deriving (Eq, Show, Generic) defaultConfigExFlags :: ConfigExFlags defaultConfigExFlags = mempty { configSolver = Flag defaultSolver } @@ -1697,17 +1697,9 @@ installNumJobs :: Flag (Maybe Int), installKeepGoing :: Flag Bool, installRunTests :: Flag Bool, - installOfflineMode :: Flag Bool, - -- | The cabal project file name; defaults to @cabal.project@. - -- Th name itself denotes the cabal project file name, but it also - -- is the base of auxiliary project files, such as - -- @cabal.project.local@ and @cabal.project.freeze@ which are also - -- read and written out in some cases. If the path is not found - -- in the current working directory, we will successively probe - -- relative to parent directories until this name is found. - installProjectFileName :: Flag FilePath -- TODO: use ProjectFlags + installOfflineMode :: Flag Bool } - deriving (Eq, Generic) + deriving (Eq, Show, Generic) instance Binary InstallFlags @@ -1745,8 +1737,7 @@ installNumJobs = mempty, installKeepGoing = Flag False, installRunTests = mempty, - installOfflineMode = Flag False, - installProjectFileName = mempty + installOfflineMode = Flag False } where docIndexFile = toPathTemplate ("$datadir" "doc" @@ -2055,10 +2046,6 @@ installOfflineMode (\v flags -> flags { installOfflineMode = v }) (yesNoOpt showOrParseArgs) - , option [] ["project-file"] - "Set the name of the cabal.project file to search for in parent directories" - installProjectFileName (\v flags -> flags {installProjectFileName = v}) - (reqArgFlag "FILE") ] ++ case showOrParseArgs of -- TODO: remove when "cabal install" -- avoids ParseArgs -> diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SetupWrapper.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SetupWrapper.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SetupWrapper.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SetupWrapper.hs 2020-05-29 20:33:21.000000000 +0000 @@ -41,7 +41,8 @@ import Distribution.PackageDescription ( GenericPackageDescription(packageDescription) , PackageDescription(..), specVersion, buildType - , BuildType(..), defaultRenaming ) + , BuildType(..) ) +import Distribution.Types.ModuleRenaming (defaultRenaming) import Distribution.PackageDescription.Parsec ( readGenericPackageDescription ) import Distribution.Simple.Configure @@ -87,7 +88,7 @@ ( safeHead ) import Distribution.Simple.Utils ( die', debug, info, infoNoWrap - , cabalVersion, tryFindPackageDesc, comparing + , cabalVersion, tryFindPackageDesc , createDirectoryIfMissingVerbose, installExecutableFile , copyFileVerbose, rewriteFileEx, rewriteFileLBS ) import Distribution.Client.Utils @@ -100,18 +101,14 @@ import Distribution.ReadE import Distribution.System ( Platform(..), buildPlatform ) -import Distribution.Pretty (prettyShow) import Distribution.Utils.NubList ( toNubListR ) import Distribution.Verbosity -import Distribution.Compat.Exception - ( catchIO ) import Distribution.Compat.Stack import System.Directory ( doesFileExist ) import System.FilePath ( (), (<.>) ) import System.IO ( Handle, hPutStr ) -import System.Exit ( ExitCode(..), exitWith ) import Distribution.Compat.Process (createProcess) import System.Process ( StdStream(..), proc, waitForProcess , ProcessHandle ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SolverInstallPlan.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SolverInstallPlan.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SolverInstallPlan.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SolverInstallPlan.hs 2020-05-29 20:33:21.000000000 +0000 @@ -58,8 +58,6 @@ ( PackageIdentifier(..), Package(..), PackageName , HasUnitId(..), PackageId, packageVersion, packageName ) import qualified Distribution.Solver.Types.ComponentDeps as CD -import Distribution.Pretty - ( prettyShow ) import Distribution.Client.Types ( UnresolvedPkgLoc ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SourceFiles.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SourceFiles.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SourceFiles.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SourceFiles.hs 2020-05-29 20:33:21.000000000 +0000 @@ -37,7 +37,6 @@ import Distribution.Client.Compat.Prelude import System.FilePath -import Control.Monad import qualified Data.Set as Set needElaboratedConfiguredPackage :: ElaboratedConfiguredPackage -> Rebuild () @@ -48,7 +47,7 @@ needElaboratedPackage :: ElaboratedConfiguredPackage -> ElaboratedPackage -> Rebuild () needElaboratedPackage elab epkg = - mapM_ (needComponent pkg_descr) (enabledComponents pkg_descr enabled) + traverse_ (needComponent pkg_descr) (enabledComponents pkg_descr enabled) where pkg_descr = elabPkgDescription elab enabled_stanzas = pkgStanzasEnabled epkg @@ -89,7 +88,7 @@ needForeignLib :: PackageDescription -> ForeignLib -> Rebuild () needForeignLib pkg_descr (ForeignLib { foreignLibModDefFile = fs , foreignLibBuildInfo = bi }) - = do mapM_ needIfExists fs + = do traverse_ needIfExists fs needBuildInfo pkg_descr bi [] needExecutable :: PackageDescription -> Executable -> Rebuild () @@ -145,21 +144,21 @@ -- A.hs-boot; need to track both. findNeededModules ["hs", "lhs", "hsig", "lhsig"] findNeededModules ["hs-boot", "lhs-boot"] - mapM_ needIfExists (cSources bi ++ jsSources bi) + traverse_ needIfExists (cSources bi ++ jsSources bi) -- A MASSIVE HACK to (1) make sure we rebuild when header -- files change, but (2) not have to rebuild when anything -- in extra-src-files changes (most of these won't affect -- compilation). It would be even better if we knew on a -- per-component basis which headers would be used but that -- seems to be too difficult. - mapM_ needIfExists (filter ((==".h").takeExtension) (extraSrcFiles pkg_descr)) - forM_ (installIncludes bi) $ \f -> + traverse_ needIfExists (filter ((==".h").takeExtension) (extraSrcFiles pkg_descr)) + for_ (installIncludes bi) $ \f -> findFileMonitored ("." : includeDirs bi) f >>= maybe (return ()) need where - findNeededModules exts = - mapM_ (findNeededModule exts) - (modules ++ otherModules bi) + findNeededModules exts = traverse_ + (findNeededModule exts) + (modules ++ otherModules bi) findNeededModule exts m = findFileWithExtensionMonitored (ppSuffixes knownSuffixHandlers ++ exts) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SrcDist.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SrcDist.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/SrcDist.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/SrcDist.hs 2020-05-29 20:33:21.000000000 +0000 @@ -3,6 +3,9 @@ allPackageSourceFiles, ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.PackageDescription.Configuration (flattenPackageDescription) import Distribution.PackageDescription.Parsec (readGenericPackageDescription) import Distribution.Simple.PreProcess (knownSuffixHandlers) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Store.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Store.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Store.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Store.hs 2020-05-29 20:33:21.000000000 +0000 @@ -33,11 +33,10 @@ import Distribution.Simple.Utils ( withTempDirectory, debug, info ) import Distribution.Verbosity -import Distribution.Pretty (prettyShow) + ( silent ) import qualified Data.Set as Set import Control.Exception -import Control.Monad (forM_) import System.FilePath import System.Directory @@ -214,7 +213,7 @@ -- Atomically rename the temp dir to the final store entry location. renameDirectory incomingEntryDir finalEntryDir - forM_ otherFiles $ \file -> do + for_ otherFiles $ \file -> do let finalStoreFile = storeDirectory compid makeRelative (incomingTmpDir (dropDrive (storeDirectory compid))) file createDirectoryIfMissing True (takeDirectory finalStoreFile) renameFile file finalStoreFile diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/TargetProblem.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/TargetProblem.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/TargetProblem.hs 1970-01-01 00:00:00.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/TargetProblem.hs 2020-05-29 20:33:21.000000000 +0000 @@ -0,0 +1,55 @@ +{-# LANGUAGE DeriveFunctor #-} +module Distribution.Client.TargetProblem ( + TargetProblem(..), + TargetProblem', +) where + +import Distribution.Client.Compat.Prelude +import Prelude () + +import Distribution.Client.ProjectPlanning (AvailableTarget) +import Distribution.Client.TargetSelector (SubComponentTarget, TargetSelector) +import Distribution.Package (PackageId, PackageName) +import Distribution.Simple.LocalBuildInfo (ComponentName (..)) +import Distribution.Types.UnqualComponentName (UnqualComponentName) + +-- | Target problems that occur during project orchestration. +data TargetProblem a + = TargetNotInProject PackageName + | TargetAvailableInIndex PackageName + + | TargetComponentNotProjectLocal + PackageId ComponentName SubComponentTarget + + | TargetComponentNotBuildable + PackageId ComponentName SubComponentTarget + + | TargetOptionalStanzaDisabledByUser + PackageId ComponentName SubComponentTarget + + | TargetOptionalStanzaDisabledBySolver + PackageId ComponentName SubComponentTarget + + | TargetProblemUnknownComponent + PackageName (Either UnqualComponentName ComponentName) + + | TargetProblemNoneEnabled TargetSelector [AvailableTarget ()] + -- ^ The 'TargetSelector' matches component (test/benchmark/...) but none are buildable + + | TargetProblemNoTargets TargetSelector + -- ^ There are no targets at all + + -- The target matching stuff only returns packages local to the project, + -- so these lookups should never fail, but if 'resolveTargets' is called + -- directly then of course it can. + | TargetProblemNoSuchPackage PackageId + | TargetProblemNoSuchComponent PackageId ComponentName + + | CustomTargetProblem a + -- | A custom target problem + deriving (Eq, Show, Functor) + +-- | Type alias for a 'TargetProblem' with no user-defined problems/errors. +-- +-- Can use the utilities below for reporting/rendering problems. +type TargetProblem' = TargetProblem Void diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/TargetSelector.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/TargetSelector.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/TargetSelector.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/TargetSelector.hs 2020-05-29 20:33:21.000000000 +0000 @@ -49,7 +49,6 @@ import Distribution.Client.Types ( PackageLocation(..), PackageSpecifier(..) ) -import Distribution.Verbosity import Distribution.PackageDescription ( PackageDescription , Executable(..) @@ -66,23 +65,15 @@ ( Component(..), ComponentName(..), LibraryName(..) , pkgComponents, componentName, componentBuildInfo ) import Distribution.Types.ForeignLib -import Distribution.Parsec (Parsec (..), simpleParsec) -import Distribution.Pretty (prettyShow) import Distribution.Simple.Utils ( die', lowercase, ordNub ) import Distribution.Client.Utils ( makeRelativeCanonical ) -import Data.Either - ( partitionEithers ) -import Data.Function - ( on ) import Data.List - ( stripPrefix, partition, groupBy ) + ( stripPrefix, groupBy ) import qualified Data.List.NonEmpty as NE -import Data.Ord - ( comparing ) import qualified Data.Map.Lazy as Map.Lazy import qualified Data.Map.Strict as Map import qualified Data.Set as Set @@ -225,7 +216,7 @@ readTargetSelectorsWith dirActions@DirActions{} pkgs mfilter targetStrs = case parseTargetStrings targetStrs of ([], usertargets) -> do - usertargets' <- mapM (getTargetStringFileStatus dirActions) usertargets + usertargets' <- traverse (getTargetStringFileStatus dirActions) usertargets knowntargets <- getKnownTargets dirActions pkgs case resolveTargetSelectors knowntargets usertargets' mfilter of ([], btargets) -> return (Right btargets) @@ -1727,7 +1718,7 @@ -> [PackageSpecifier (SourcePackage (PackageLocation a))] -> m KnownTargets getKnownTargets dirActions@DirActions{..} pkgs = do - pinfo <- mapM (collectKnownPackageInfo dirActions) pkgs + pinfo <- traverse (collectKnownPackageInfo dirActions) pkgs cwd <- getCurrentDirectory let (ppinfo, opinfo) = selectPrimaryPackage cwd pinfo return KnownTargets { @@ -2117,12 +2108,14 @@ -> Match (FilePath, KnownComponent) matchComponentOtherFile cs = matchFile - [ (file, c) - | c <- cs - , file <- cinfoHsFiles c - ++ cinfoCFiles c - ++ cinfoJsFiles c + [ (normalise (srcdir file), c) + | c <- cs + , srcdir <- cinfoSrcDirs c + , file <- cinfoHsFiles c + ++ cinfoCFiles c + ++ cinfoJsFiles c ] + . normalise matchComponentModuleFile :: [KnownComponent] -> String diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Targets.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Targets.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Targets.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Targets.hs 2020-05-29 20:33:21.000000000 +0000 @@ -82,22 +82,15 @@ ( nullFlagAssignment, parsecFlagAssignmentNonEmpty ) import Distribution.Version ( anyVersion, isAnyVersion ) -import Distribution.Pretty (Pretty (..), prettyShow) -import Distribution.Parsec (Parsec (..), CabalParsing, explicitEitherParsec, eitherParsec) -import Distribution.Verbosity (Verbosity) import Distribution.Simple.Utils ( die', warn, lowercase ) import Distribution.PackageDescription.Parsec ( readGenericPackageDescription, parseGenericPackageDescriptionMaybe ) --- import Data.List ( find, nub ) -import Data.Either - ( partitionEithers ) import qualified Data.Map as Map import qualified Data.ByteString.Lazy as BS import qualified Distribution.Client.GZipUtils as GZipUtils -import Control.Monad (mapM) import qualified Distribution.Compat.CharParsing as P import System.FilePath ( takeExtension, dropExtension, takeDirectory, splitPath ) @@ -170,7 +163,7 @@ readUserTargets :: Verbosity -> [String] -> IO [UserTarget] readUserTargets verbosity targetStrs = do (problems, targets) <- liftM partitionEithers - (mapM readUserTarget targetStrs) + (traverse readUserTarget targetStrs) reportUserTargetProblems verbosity problems return targets @@ -316,9 +309,9 @@ -- given the user targets, get a list of fully or partially resolved -- package references - packageTargets <- mapM (readPackageTarget verbosity) - =<< mapM (fetchPackageTarget verbosity repoCtxt) . concat - =<< mapM (expandUserTarget verbosity worldFile) userTargets + packageTargets <- traverse (readPackageTarget verbosity) + =<< traverse (fetchPackageTarget verbosity repoCtxt) . concat + =<< traverse (expandUserTarget verbosity worldFile) userTargets -- users are allowed to give package names case-insensitively, so we must -- disambiguate named package references diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Tar.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Tar.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Tar.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Tar.hs 2020-05-29 20:33:21.000000000 +0000 @@ -28,6 +28,9 @@ entriesToList, ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import qualified Data.ByteString.Lazy as BS import qualified Codec.Archive.Tar as Tar import qualified Codec.Archive.Tar.Entry as Tar @@ -35,7 +38,8 @@ import qualified Codec.Compression.GZip as GZip import qualified Distribution.Client.GZipUtils as GZipUtils -import Control.Exception (Exception(..), throw) +-- for foldEntries... +import Control.Exception (throw) -- -- * High level operations diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/AllowNewer.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/AllowNewer.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/AllowNewer.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/AllowNewer.hs 2020-05-29 20:33:21.000000000 +0000 @@ -14,8 +14,7 @@ import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Parsec (CabalParsing, Parsec (..), parsecLeadingCommaNonEmpty) -import Distribution.Pretty (Pretty (..)) +import Distribution.Parsec (parsecLeadingCommaNonEmpty) import Distribution.Types.PackageId (PackageId, PackageIdentifier (..)) import Distribution.Types.PackageName (PackageName, mkPackageName) import Distribution.Types.Version (nullVersion) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/BuildResults.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/BuildResults.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/BuildResults.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/BuildResults.hs 2020-05-29 20:33:21.000000000 +0000 @@ -11,8 +11,6 @@ import Distribution.Client.Compat.Prelude import Prelude () -import Control.Exception (Exception, SomeException) - import Distribution.Types.InstalledPackageInfo (InstalledPackageInfo) import Distribution.Types.PackageId (PackageId) import Distribution.Types.UnitId (UnitId) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/Credentials.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/Credentials.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/Credentials.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/Credentials.hs 2020-05-29 20:33:21.000000000 +0000 @@ -3,5 +3,7 @@ Password (..), ) where +import Prelude (String) + newtype Username = Username { unUsername :: String } newtype Password = Password { unPassword :: String } diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/InstallMethod.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/InstallMethod.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/InstallMethod.hs 1970-01-01 00:00:00.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/InstallMethod.hs 2020-05-29 20:33:21.000000000 +0000 @@ -0,0 +1,32 @@ +{-# LANGUAGE DeriveGeneric #-} +module Distribution.Client.Types.InstallMethod where + +import Distribution.Client.Compat.Prelude +import Prelude () + +import qualified Distribution.Compat.CharParsing as P +import qualified Text.PrettyPrint as PP + +data InstallMethod + = InstallMethodCopy + | InstallMethodSymlink + deriving (Eq, Show, Generic, Bounded, Enum) + +instance Binary InstallMethod +instance Structured InstallMethod + +-- | Last +instance Semigroup InstallMethod where + _ <> x = x + +instance Parsec InstallMethod where + parsec = do + name <- P.munch1 isAlpha + case name of + "copy" -> pure InstallMethodCopy + "symlink" -> pure InstallMethodSymlink + _ -> P.unexpected $ "InstallMethod: " ++ name + +instance Pretty InstallMethod where + pretty InstallMethodCopy = PP.text "copy" + pretty InstallMethodSymlink = PP.text "symlink" diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/OverwritePolicy.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/OverwritePolicy.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/OverwritePolicy.hs 1970-01-01 00:00:00.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/OverwritePolicy.hs 2020-05-29 20:33:21.000000000 +0000 @@ -0,0 +1,28 @@ +{-# LANGUAGE DeriveGeneric #-} +module Distribution.Client.Types.OverwritePolicy where + +import Distribution.Client.Compat.Prelude +import Prelude () + +import qualified Distribution.Compat.CharParsing as P +import qualified Text.PrettyPrint as PP + +data OverwritePolicy + = NeverOverwrite + | AlwaysOverwrite + deriving (Show, Eq, Generic, Bounded, Enum) + +instance Binary OverwritePolicy +instance Structured OverwritePolicy + +instance Parsec OverwritePolicy where + parsec = do + name <- P.munch1 isAlpha + case name of + "always" -> pure AlwaysOverwrite + "never" -> pure NeverOverwrite + _ -> P.unexpected $ "OverwritePolicy: " ++ name + +instance Pretty OverwritePolicy where + pretty NeverOverwrite = PP.text "never" + pretty AlwaysOverwrite = PP.text "always" diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/Repo.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/Repo.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/Repo.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/Repo.hs 2020-05-29 20:33:21.000000000 +0000 @@ -18,8 +18,6 @@ import Network.URI (URI (..), nullURI, parseAbsoluteURI, uriToString) -import Distribution.Parsec (Parsec (..)) -import Distribution.Pretty (Pretty (..)) import Distribution.Simple.Utils (toUTF8BS) import Distribution.Client.HashValue (hashValue, showHashValue, truncateHash) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/RepoName.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/RepoName.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Types/RepoName.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Types/RepoName.hs 2020-05-29 20:33:21.000000000 +0000 @@ -7,9 +7,6 @@ import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Parsec (Parsec (..)) -import Distribution.Pretty (Pretty (..)) - import qualified Distribution.Compat.CharParsing as P import qualified Text.PrettyPrint as Disp diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Update.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Update.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Update.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Update.hs 2020-05-29 20:33:21.000000000 +0000 @@ -15,6 +15,9 @@ ( update ) where +import Distribution.Client.Compat.Prelude +import Prelude () + import Distribution.Simple.Setup ( fromFlag ) import Distribution.Client.Compat.Directory @@ -34,9 +37,7 @@ ( newParallelJobControl, spawnJob, collectJob ) import Distribution.Client.Setup ( RepoContext(..), UpdateFlags(..) ) -import Distribution.Pretty - ( prettyShow ) -import Distribution.Verbosity +import Distribution.Verbosity (lessVerbose) import Distribution.Simple.Utils ( writeFileAtomic, warn, notice, noticeNoWrap ) @@ -44,9 +45,7 @@ import qualified Data.ByteString.Lazy as BS import Distribution.Client.GZipUtils (maybeDecompress) import System.FilePath ((<.>), dropExtension) -import Data.Maybe (mapMaybe) import Data.Time (getCurrentTime) -import Control.Monad import qualified Hackage.Security.Client as Sec @@ -67,8 +66,8 @@ $ "Downloading the latest package lists from: " : map (("- " ++) . unRepoName . remoteRepoName) remoteRepos jobCtrl <- newParallelJobControl (length repos) - mapM_ (spawnJob jobCtrl . updateRepo verbosity updateFlags repoCtxt) repos - mapM_ (\_ -> collectJob jobCtrl) repos + traverse_ (spawnJob jobCtrl . updateRepo verbosity updateFlags repoCtxt) repos + traverse_ (\_ -> collectJob jobCtrl) repos updateRepo :: Verbosity -> UpdateFlags -> RepoContext -> Repo -> IO () updateRepo verbosity updateFlags repoCtxt repo = do diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Upload.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Upload.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Upload.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Upload.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,5 +1,8 @@ module Distribution.Client.Upload (upload, uploadDoc, report) where +import Distribution.Client.Compat.Prelude +import qualified Prelude as Unsafe (tail, head, read) + import Distribution.Client.Types.Credentials ( Username(..), Password(..) ) import Distribution.Client.Types.Repo (RemoteRepo(..), maybeRepoRemote) import Distribution.Client.Types.RepoName (unRepoName) @@ -9,8 +12,6 @@ ( IsCandidate(..), RepoContext(..) ) import Distribution.Simple.Utils (notice, warn, info, die', toUTF8BS) -import Distribution.Verbosity (Verbosity) -import Distribution.Pretty (prettyShow) import Distribution.Client.Config import qualified Distribution.Client.BuildReports.Anonymous as BuildReport @@ -22,13 +23,9 @@ import System.IO (hFlush, stdout) import System.IO.Echo (withoutInputEcho) -import System.Exit (exitFailure) import System.FilePath ((), takeExtension, takeFileName, dropExtension) import qualified System.FilePath.Posix as FilePath.Posix (()) import System.Directory -import Control.Monad (forM_, when, foldM) -import Data.Maybe (mapMaybe) -import Data.Char (isSpace) type Auth = Maybe (String, String) @@ -52,7 +49,7 @@ targetRepo <- case [ remoteRepo | Just remoteRepo <- map maybeRepoRemote repos ] of [] -> die' verbosity "Cannot upload. No remote repositories are configured." - rs -> remoteRepoTryUpgradeToHttps verbosity transport (last rs) + (r:rs) -> remoteRepoTryUpgradeToHttps verbosity transport (last (r:|rs)) let targetRepoURI = remoteRepoURI targetRepo domain = maybe "Hackage" uriRegName $ uriAuthority targetRepoURI rootIfEmpty x = if null x then "/" else x @@ -74,7 +71,7 @@ Username username <- maybe (promptUsername domain) return mUsername Password password <- maybe (promptPassword domain) return mPassword let auth = Just (username,password) - forM_ paths $ \path -> do + for_ paths $ \path -> do notice verbosity $ "Uploading " ++ path ++ "... " case fmap takeFileName (stripExtensions ["tar", "gz"] path) of Just pkgid -> handlePackage transport verbosity uploadURI @@ -92,7 +89,7 @@ targetRepo <- case [ remoteRepo | Just remoteRepo <- map maybeRepoRemote repos ] of [] -> die' verbosity $ "Cannot upload. No remote repositories are configured." - rs -> remoteRepoTryUpgradeToHttps verbosity transport (last rs) + (r:rs) -> remoteRepoTryUpgradeToHttps verbosity transport (last (r:|rs)) let targetRepoURI = remoteRepoURI targetRepo domain = maybe "Hackage" uriRegName $ uriAuthority targetRepoURI rootIfEmpty x = if null x then "/" else x @@ -117,9 +114,9 @@ } (reverseSuffix, reversePkgid) = break (== '-') (reverse (takeFileName path)) - pkgid = reverse $ tail reversePkgid + pkgid = reverse $ Unsafe.tail reversePkgid when (reverse reverseSuffix /= "docs.tar.gz" - || null reversePkgid || head reversePkgid /= '-') $ + || null reversePkgid || Unsafe.head reversePkgid /= '-') $ die' verbosity "Expected a file name matching the pattern -docs.tar.gz" Username username <- maybe (promptUsername domain) return mUsername Password password <- maybe (promptPassword domain) return mPassword @@ -172,7 +169,7 @@ report verbosity repoCtxt mUsername mPassword = do let repos = repoContextRepos repoCtxt remoteRepos = mapMaybe maybeRepoRemote repos - forM_ remoteRepos $ \remoteRepo -> do + for_ remoteRepos $ \remoteRepo -> do let domain = maybe "Hackage" uriRegName $ uriAuthority (remoteRepoURI remoteRepo) Username username <- maybe (promptUsername domain) return mUsername Password password <- maybe (promptPassword domain) return mPassword @@ -185,9 +182,9 @@ srcExists <- doesDirectoryExist srcDir when srcExists $ do contents <- getDirectoryContents srcDir - forM_ (filter (\c -> takeExtension c ==".log") contents) $ \logFile -> + for_ (filter (\c -> takeExtension c ==".log") contents) $ \logFile -> do inp <- readFile (srcDir logFile) - let (reportStr, buildLog) = read inp :: (String,String) -- TODO: eradicateNoParse + let (reportStr, buildLog) = Unsafe.read inp :: (String,String) -- TODO: eradicateNoParse case parseBuildReport (toUTF8BS reportStr) of Left errs -> warn verbosity $ "Errors: " ++ errs -- FIXME Right report' -> diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Utils/Assertion.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Utils/Assertion.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Utils/Assertion.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Utils/Assertion.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,9 +1,13 @@ {-# LANGUAGE CPP #-} module Distribution.Client.Utils.Assertion (expensiveAssert) where + #ifdef DEBUG_EXPENSIVE_ASSERTIONS +import Prelude (Bool) import Control.Exception (assert) import Distribution.Compat.Stack +#else +import Prelude (Bool, id) #endif -- | Like 'assert', but only enabled with -fdebug-expensive-assertions. This diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Utils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Utils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Utils.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Utils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -27,18 +27,16 @@ import Distribution.Client.Compat.Prelude import Distribution.Compat.Environment -import Distribution.Compat.Exception ( catchIO ) -import Distribution.Compat.Time ( getModTime ) +import Distribution.Compat.Time ( getModTime ) import Distribution.Simple.Setup ( Flag(..) ) import Distribution.Version -import Distribution.Verbosity import Distribution.Simple.Utils ( die', findPackageDesc, noticeNoWrap ) import qualified Data.ByteString.Lazy as BS import Data.Bits ( (.|.), shiftL, shiftR ) import System.FilePath import Control.Monad - ( mapM, mapM_, zipWithM_ ) + ( zipWithM_ ) import Data.List ( groupBy ) import Foreign.C.Types ( CInt(..) ) @@ -149,8 +147,8 @@ -- environment is a process-global concept. withEnvOverrides :: [(String, Maybe FilePath)] -> IO a -> IO a withEnvOverrides overrides m = do - mb_olds <- mapM lookupEnv envVars - mapM_ (uncurry update) overrides + mb_olds <- traverse lookupEnv envVars + traverse_ (uncurry update) overrides m `Exception.finally` zipWithM_ update envVars mb_olds where envVars :: [String] diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/VCS.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/VCS.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/VCS.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/VCS.hs 2020-05-29 20:33:21.000000000 +0000 @@ -40,7 +40,7 @@ import Distribution.Client.RebuildMonad ( Rebuild, monitorFiles, MonitorFilePath, monitorDirectoryExistence ) import Distribution.Verbosity as Verbosity - ( Verbosity, normal ) + ( normal ) import Distribution.Simple.Program ( Program(programFindVersion) , ConfiguredProgram(programVersion) @@ -51,14 +51,10 @@ ( mkVersion ) import qualified Distribution.PackageDescription as PD -import Control.Monad - ( mapM_ ) import Control.Monad.Trans ( liftIO ) import qualified Data.Char as Char import qualified Data.Map as Map -import Data.Either - ( partitionEithers ) import System.FilePath ( takeDirectory ) import System.Directory @@ -187,7 +183,7 @@ -> IO () cloneSourceRepo verbosity vcs repo@SourceRepositoryPackage{ srpLocation = srcuri } destdir = - mapM_ (runProgramInvocation verbosity) invocations + traverse_ (runProgramInvocation verbosity) invocations where invocations = vcsCloneRepo vcs verbosity (vcsProgram vcs) repo diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Win32SelfUpgrade.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Win32SelfUpgrade.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/Win32SelfUpgrade.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/Win32SelfUpgrade.hs 2020-05-29 20:33:21.000000000 +0000 @@ -42,6 +42,9 @@ deleteOldExeFile, ) where +import Distribution.Client.Compat.Prelude hiding (log) +import Prelude () + #ifdef mingw32_HOST_OS import qualified System.Win32 as Win32 @@ -51,10 +54,9 @@ import System.Directory (canonicalizePath) import System.FilePath (takeBaseName, replaceBaseName, equalFilePath) -import Distribution.Verbosity as Verbosity (Verbosity, showForCabal) +import Distribution.Verbosity as Verbosity (showForCabal) import Distribution.Simple.Utils (debug, info) -import Prelude hiding (log) -- | If one of the given files is our own exe file then we arrange things such -- that the nested action can replace our own exe file. @@ -68,7 +70,7 @@ possibleSelfUpgrade verbosity newPaths action = do dstPath <- canonicalizePath =<< Win32.getModuleFileName Win32.nullHANDLE - newPaths' <- mapM canonicalizePath newPaths + newPaths' <- traverse canonicalizePath newPaths let doingSelfUpgrade = any (equalFilePath dstPath) newPaths' if not doingSelfUpgrade @@ -211,7 +213,6 @@ #else -import Distribution.Verbosity (Verbosity) import Distribution.Simple.Utils (die') possibleSelfUpgrade :: Verbosity diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/World.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/World.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Client/World.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Client/World.hs 2020-05-29 20:33:21.000000000 +0000 @@ -37,14 +37,9 @@ import Distribution.Types.Flag ( FlagAssignment, unFlagAssignment , unFlagName, parsecFlagAssignmentNonEmpty ) -import Distribution.Verbosity - ( Verbosity ) import Distribution.Simple.Utils ( die', info, chattyTry, writeFileAtomic ) -import Distribution.Parsec (Parsec (..), CabalParsing, simpleParsec) -import Distribution.Pretty (Pretty (..), prettyShow) import qualified Distribution.Compat.CharParsing as P -import Distribution.Compat.Exception ( catchIO ) import qualified Text.PrettyPrint as Disp import Data.List diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Deprecated/ParseUtils.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Deprecated/ParseUtils.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Deprecated/ParseUtils.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Deprecated/ParseUtils.hs 2020-05-29 20:33:21.000000000 +0000 @@ -57,7 +57,7 @@ import qualified Text.Read as Read import qualified Control.Monad.Fail as Fail -import Distribution.Parsec (ParsecParser, explicitEitherParsec, parsecLeadingCommaList, parsecLeadingOptCommaList) +import Distribution.Parsec (ParsecParser, parsecLeadingCommaList, parsecLeadingOptCommaList) -- ----------------------------------------------------------------------------- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Deprecated/ViewAsFieldDescr.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Deprecated/ViewAsFieldDescr.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Deprecated/ViewAsFieldDescr.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Deprecated/ViewAsFieldDescr.hs 2020-05-29 20:33:21.000000000 +0000 @@ -6,8 +6,6 @@ import Prelude () import qualified Data.List.NonEmpty as NE -import Distribution.Parsec (parsec) -import Distribution.Pretty import Distribution.ReadE (parsecToReadE) import Distribution.Simple.Command import Text.PrettyPrint (cat, comma, punctuate, text) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Dependency.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Dependency.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Dependency.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Dependency.hs 2020-05-29 20:33:21.000000000 +0000 @@ -55,6 +55,7 @@ import Distribution.Solver.Types.ComponentDeps (Component(..)) import Distribution.Solver.Types.PackagePath +import Distribution.Types.LibraryName import Distribution.Types.PkgconfigVersionRange import Distribution.Types.UnqualComponentName @@ -131,7 +132,9 @@ -- | A component that can be depended upon by another package, i.e., a library -- or an executable. -data ExposedComponent = ExposedLib | ExposedExe UnqualComponentName +data ExposedComponent = + ExposedLib LibraryName + | ExposedExe UnqualComponentName deriving (Eq, Ord, Show) -- | The reason that a dependency is active. It identifies the package and any @@ -185,7 +188,7 @@ -- Suppose package B has a setup dependency on package A. -- This will be recorded as something like -- - -- > LDep (DependencyReason "B") (Dep (PkgComponent "A" ExposedLib) (Constrained AnyVersion)) + -- > LDep (DependencyReason "B") (Dep (PkgComponent "A" (ExposedLib LMainLibName)) (Constrained AnyVersion)) -- -- Observe that when we qualify this dependency, we need to turn that -- @"A"@ into @"B-setup.A"@, but we should not apply that same qualifier @@ -199,7 +202,7 @@ goD (Pkg pkn vr) _ = Pkg pkn vr goD (Dep dep@(PkgComponent qpn (ExposedExe _)) ci) _ = Dep (Q (PackagePath ns (QualExe pn qpn)) <$> dep) ci - goD (Dep dep@(PkgComponent qpn ExposedLib) ci) comp + goD (Dep dep@(PkgComponent qpn (ExposedLib _)) ci) comp | qBase qpn = Dep (Q (PackagePath ns (QualBase pn)) <$> dep) ci | qSetup comp = Dep (Q (PackagePath ns (QualSetup pn)) <$> dep) ci | otherwise = Dep (Q (PackagePath ns inheritedQ ) <$> dep) ci diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Explore.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Explore.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Explore.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Explore.hs 2020-05-29 20:33:21.000000000 +0000 @@ -3,13 +3,14 @@ {-# LANGUAGE ScopedTypeVariables #-} module Distribution.Solver.Modular.Explore (backjumpAndExplore) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import qualified Distribution.Solver.Types.Progress as P -import Data.Foldable as F -import Data.List as L (foldl') -import Data.Maybe (fromMaybe) -import Data.Map.Strict as M -import Data.Set as S +import qualified Data.List as L (foldl') +import qualified Data.Map.Strict as M +import qualified Data.Set as S import Distribution.Simple.Setup (asBool) @@ -81,7 +82,7 @@ -> ExploreState -> ConflictSetLog a backjump mbj enableBj fineGrainedConflicts couldResolveConflicts logSkippedChoice var lastCS xs = - F.foldr combine avoidGoal [(k, v) | (_, k, v) <- W.toList xs] CS.empty Nothing + foldr combine avoidGoal [(k, v) | (_, k, v) <- W.toList xs] CS.empty Nothing where combine :: (k, ExploreState -> ConflictSetLog a) -> (ConflictSet -> Maybe ConflictSet -> ExploreState -> ConflictSetLog a) @@ -269,7 +270,7 @@ -- to be merged with the previous one. couldResolveConflicts :: QPN -> POption -> S.Set CS.Conflict -> Maybe ConflictSet couldResolveConflicts currentQPN@(Q _ pn) (POption i@(I v _) _) conflicts = - let (PInfo deps _ _ _) = idx ! pn ! i + let (PInfo deps _ _ _) = idx M.! pn M.! i qdeps = qualifyDeps (defaultQualifyOptions idx) currentQPN deps couldBeResolved :: CS.Conflict -> Maybe ConflictSet @@ -277,7 +278,7 @@ couldBeResolved (CS.GoalConflict conflictingDep) = -- Check whether this package instance also has 'conflictingDep' -- as a dependency (ignoring flag and stanza choices). - if F.null [() | Simple (LDep _ (Dep (PkgComponent qpn _) _)) _ <- qdeps, qpn == conflictingDep] + if null [() | Simple (LDep _ (Dep (PkgComponent qpn _) _)) _ <- qdeps, qpn == conflictingDep] then Nothing else Just CS.empty couldBeResolved (CS.VersionConstraintConflict dep excludedVersion) = diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/IndexConversion.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/IndexConversion.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/IndexConversion.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/IndexConversion.hs 2020-05-29 20:33:21.000000000 +0000 @@ -2,11 +2,12 @@ ( convPIs ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import qualified Data.List as L -import Data.Map.Strict (Map) import qualified Data.Map.Strict as M -import Data.Maybe (mapMaybe, fromMaybe, maybeToList) -import Data.Monoid as Mon +import qualified Distribution.Compat.NonEmptySet as NonEmptySet import qualified Data.Set as S import qualified Distribution.InstalledPackageInfo as IPI @@ -24,7 +25,6 @@ import Distribution.PackageDescription.Configuration import qualified Distribution.Simple.PackageIndex as SI import Distribution.System -import Distribution.Types.ForeignLib import Distribution.Solver.Types.ComponentDeps ( Component(..), componentNameToComponent ) @@ -90,13 +90,20 @@ -- | Convert a single installed package into the solver-specific format. convIP :: SI.InstalledPackageIndex -> IPI.InstalledPackageInfo -> (PN, I, PInfo) convIP idx ipi = - case mapM (convIPId (DependencyReason pn M.empty S.empty) comp idx) (IPI.depends ipi) of + case traverse (convIPId (DependencyReason pn M.empty S.empty) comp idx) (IPI.depends ipi) of Nothing -> (pn, i, PInfo [] M.empty M.empty (Just Broken)) - Just fds -> ( pn - , i - , PInfo fds (M.singleton ExposedLib (IsBuildable True)) M.empty Nothing) + Just fds -> ( pn, i, PInfo fds components M.empty Nothing) where + -- TODO: Handle sub-libraries and visibility. + components = + M.singleton (ExposedLib LMainLibName) + ComponentInfo { + compIsVisible = IsVisible True + , compIsBuildable = IsBuildable True + } + (pn, i) = convId ipi + -- 'sourceLibName' is unreliable, but for now we only really use this for -- primary libs anyways comp = componentNameToComponent $ CLibName $ IPI.sourceLibName ipi @@ -140,7 +147,8 @@ case SI.lookupUnitId idx ipid of Nothing -> Nothing Just ipi -> let (pn, i) = convId ipi - in Just (D.Simple (LDep dr (Dep (PkgComponent pn ExposedLib) (Fixed i))) comp) + name = ExposedLib LMainLibName -- TODO: Handle sub-libraries. + in Just (D.Simple (LDep dr (Dep (PkgComponent pn name) (Fixed i))) comp) -- NB: something we pick up from the -- InstalledPackageIndex is NEVER an executable @@ -182,7 +190,7 @@ ipns = S.fromList $ [ unqualComponentNameToPackageName nm | (nm, _) <- sub_libs ] - conv :: Mon.Monoid a => Component -> (a -> BuildInfo) -> DependencyReason PN -> + conv :: Monoid a => Component -> (a -> BuildInfo) -> DependencyReason PN -> CondTree ConfVar [Dependency] a -> FlaggedDeps PN conv comp getInfo dr = convCondTree M.empty dr pkg os arch cinfo pn fds comp getInfo ipns solveExes . @@ -213,34 +221,52 @@ Just ver -> Just (UnsupportedSpecVer ver) Nothing -> Nothing - components :: Map ExposedComponent IsBuildable - components = M.fromList $ libComps ++ exeComps + components :: Map ExposedComponent ComponentInfo + components = M.fromList $ libComps ++ subLibComps ++ exeComps where - libComps = [ (ExposedLib, IsBuildable $ isBuildable libBuildInfo lib) + libComps = [ (ExposedLib LMainLibName, libToComponentInfo lib) | lib <- maybeToList mlib ] - exeComps = [ (ExposedExe name, IsBuildable $ isBuildable buildInfo exe) + subLibComps = [ (ExposedLib (LSubLibName name), libToComponentInfo lib) + | (name, lib) <- sub_libs ] + exeComps = [ ( ExposedExe name + , ComponentInfo { + compIsVisible = IsVisible True + , compIsBuildable = IsBuildable $ testCondition (buildable . buildInfo) exe /= Just False + } + ) | (name, exe) <- exes ] - isBuildable = isBuildableComponent os arch cinfo constraints + + libToComponentInfo lib = + ComponentInfo { + compIsVisible = IsVisible $ testCondition (isPrivate . libVisibility) lib /= Just True + , compIsBuildable = IsBuildable $ testCondition (buildable . libBuildInfo) lib /= Just False + } + + testCondition = testConditionForComponent os arch cinfo constraints + + isPrivate LibraryVisibilityPrivate = True + isPrivate LibraryVisibilityPublic = False in PInfo flagged_deps components fds fr --- | Returns true if the component is buildable in the given environment. --- This function can give false-positives. For example, it only considers flags --- that are set by unqualified flag constraints, and it doesn't check whether --- the intra-package dependencies of a component are buildable. It is also --- possible for the solver to later assign a value to an automatic flag that --- makes the component unbuildable. -isBuildableComponent :: OS - -> Arch - -> CompilerInfo - -> [LabeledPackageConstraint] - -> (a -> BuildInfo) - -> CondTree ConfVar [Dependency] a - -> Bool -isBuildableComponent os arch cinfo constraints getInfo tree = - case simplifyCondition $ extractCondition (buildable . getInfo) tree of - Lit False -> False - _ -> True +-- | Applies the given predicate (for example, testing buildability or +-- visibility) to the given component and environment. Values are combined with +-- AND. This function returns 'Nothing' when the result cannot be determined +-- before dependency solving. Additionally, this function only considers flags +-- that are set by unqualified flag constraints, and it doesn't check the +-- intra-package dependencies of a component. +testConditionForComponent :: OS + -> Arch + -> CompilerInfo + -> [LabeledPackageConstraint] + -> (a -> Bool) + -> CondTree ConfVar [Dependency] a + -> Maybe Bool +testConditionForComponent os arch cinfo constraints p tree = + case go $ extractCondition p tree of + Lit True -> Just True + Lit False -> Just False + _ -> Nothing where flagAssignment :: [(FlagName, Bool)] flagAssignment = @@ -251,10 +277,10 @@ -- Simplify the condition, using the current environment. Most of this -- function was copied from convBranch and -- Distribution.Types.Condition.simplifyCondition. - simplifyCondition :: Condition ConfVar -> Condition ConfVar - simplifyCondition (Var (OS os')) = Lit (os == os') - simplifyCondition (Var (Arch arch')) = Lit (arch == arch') - simplifyCondition (Var (Impl cf cvr)) + go :: Condition ConfVar -> Condition ConfVar + go (Var (OS os')) = Lit (os == os') + go (Var (Arch arch')) = Lit (arch == arch') + go (Var (Impl cf cvr)) | matchImpl (compilerInfoId cinfo) || -- fixme: Nothing should be treated as unknown, rather than empty -- list. This code should eventually be changed to either @@ -264,24 +290,24 @@ | otherwise = Lit False where matchImpl (CompilerId cf' cv) = cf == cf' && checkVR cvr cv - simplifyCondition (Var (PackageFlag f)) + go (Var (PackageFlag f)) | Just b <- L.lookup f flagAssignment = Lit b - simplifyCondition (Var v) = Var v - simplifyCondition (Lit b) = Lit b - simplifyCondition (CNot c) = - case simplifyCondition c of + go (Var v) = Var v + go (Lit b) = Lit b + go (CNot c) = + case go c of Lit True -> Lit False Lit False -> Lit True c' -> CNot c' - simplifyCondition (COr c d) = - case (simplifyCondition c, simplifyCondition d) of + go (COr c d) = + case (go c, go d) of (Lit False, d') -> d' (Lit True, _) -> Lit True (c', Lit False) -> c' (_, Lit True) -> Lit True (c', d') -> COr c' d' - simplifyCondition (CAnd c d) = - case (simplifyCondition c, simplifyCondition d) of + go (CAnd c d) = + case (go c, go d) of (Lit False, _) -> Lit False (Lit True, d') -> d' (_, Lit False) -> Lit False @@ -332,8 +358,10 @@ -- duplicates could grow exponentially from the leaves to the root -- of the tree. mergeSimpleDeps $ - L.map (\d -> D.Simple (convLibDep dr d) comp) - (mapMaybe (filterIPNs ipns) ds) -- unconditional package dependencies + [ D.Simple singleDep comp + | dep <- mapMaybe (filterIPNs ipns) ds + , singleDep <- convLibDeps dr dep ] -- unconditional package dependencies + ++ L.map (\e -> D.Simple (LDep dr (Ext e)) comp) (allExtensions bi) -- unconditional extension dependencies ++ L.map (\l -> D.Simple (LDep dr (Lang l)) comp) (allLanguages bi) -- unconditional language dependencies ++ L.map (\(PkgconfigDependency pkn vr) -> D.Simple (LDep dr (Pkg pkn vr)) comp) (pkgconfigDepends bi) -- unconditional pkg-config dependencies @@ -537,9 +565,12 @@ unionDRs (DependencyReason pn' fs1 ss1) (DependencyReason _ fs2 ss2) = DependencyReason pn' (M.union fs1 fs2) (S.union ss1 ss2) --- | Convert a Cabal dependency on a library to a solver-specific dependency. -convLibDep :: DependencyReason PN -> Dependency -> LDep PN -convLibDep dr (Dependency pn vr _) = LDep dr $ Dep (PkgComponent pn ExposedLib) (Constrained vr) +-- | Convert a Cabal dependency on a set of library components (from a single +-- package) to solver-specific dependencies. +convLibDeps :: DependencyReason PN -> Dependency -> [LDep PN] +convLibDeps dr (Dependency pn vr libs) = + [ LDep dr $ Dep (PkgComponent pn (ExposedLib lib)) (Constrained vr) + | lib <- NonEmptySet.toList libs ] -- | Convert a Cabal dependency on an executable (build-tools) to a solver-specific dependency. convExeDep :: DependencyReason PN -> ExeDependency -> LDep PN @@ -548,5 +579,6 @@ -- | Convert setup dependencies convSetupBuildInfo :: PN -> SetupBuildInfo -> FlaggedDeps PN convSetupBuildInfo pn nfo = - L.map (\d -> D.Simple (convLibDep (DependencyReason pn M.empty S.empty) d) ComponentSetup) - (setupDepends nfo) + [ D.Simple singleDep ComponentSetup + | dep <- setupDepends nfo + , singleDep <- convLibDeps (DependencyReason pn M.empty S.empty) dep ] diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Index.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Index.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Index.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Index.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,6 +1,8 @@ module Distribution.Solver.Modular.Index ( Index , PInfo(..) + , ComponentInfo(..) + , IsVisible(..) , IsBuildable(..) , defaultQualifyOptions , mkIndex @@ -30,10 +32,24 @@ -- globally, for reasons external to the solver. We currently use this -- for shadowing which essentially is a GHC limitation, and for -- installed packages that are broken. -data PInfo = PInfo (FlaggedDeps PN) (Map ExposedComponent IsBuildable) FlagInfo (Maybe FailReason) +data PInfo = PInfo (FlaggedDeps PN) + (Map ExposedComponent ComponentInfo) + FlagInfo + (Maybe FailReason) + +-- | Info associated with each library and executable in a package instance. +data ComponentInfo = ComponentInfo { + compIsVisible :: IsVisible + , compIsBuildable :: IsBuildable + } + +-- | Whether a component is visible in the current environment. +newtype IsVisible = IsVisible Bool + deriving Eq -- | Whether a component is made unbuildable by a "buildable: False" field. newtype IsBuildable = IsBuildable Bool + deriving Eq mkIndex :: [(PN, I, PInfo)] -> Index mkIndex xs = M.map M.fromList (groupMap (L.map (\ (pn, i, pi) -> (pn, (i, pi))) xs)) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/LabeledGraph.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/LabeledGraph.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/LabeledGraph.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/LabeledGraph.hs 2020-05-29 20:33:21.000000000 +0000 @@ -17,10 +17,11 @@ , topSort ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import Data.Array import Data.Graph (Vertex, Bounds) -import Data.List (sortBy) -import Data.Maybe (mapMaybe) import qualified Data.Graph as G {------------------------------------------------------------------------------- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Linking.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Linking.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Linking.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Linking.hs 2020-05-29 20:33:21.000000000 +0000 @@ -13,7 +13,6 @@ import Control.Exception (assert) import Control.Monad.Reader import Control.Monad.State -import Data.Function (on) import Data.Map ((!)) import qualified Data.Map as M import qualified Data.Set as S diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Message.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Message.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Message.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Message.hs 2020-05-29 20:33:21.000000000 +0000 @@ -25,6 +25,7 @@ import Distribution.Solver.Types.ConstraintSource import Distribution.Solver.Types.PackagePath import Distribution.Solver.Types.Progress +import Distribution.Types.LibraryName import Distribution.Types.UnqualComponentName data Message = @@ -220,8 +221,10 @@ showFR _ (NewPackageDoesNotMatchExistingConstraint d) = " (conflict: " ++ showConflictingDep d ++ ")" showFR _ (ConflictingConstraints d1 d2) = " (conflict: " ++ L.intercalate ", " (L.map showConflictingDep [d1, d2]) ++ ")" showFR _ (NewPackageIsMissingRequiredComponent comp dr) = " (does not contain " ++ showExposedComponent comp ++ ", which is required by " ++ showDependencyReason dr ++ ")" +showFR _ (NewPackageHasPrivateRequiredComponent comp dr) = " (" ++ showExposedComponent comp ++ " is private, but it is required by " ++ showDependencyReason dr ++ ")" showFR _ (NewPackageHasUnbuildableRequiredComponent comp dr) = " (" ++ showExposedComponent comp ++ " is not buildable in the current environment, but it is required by " ++ showDependencyReason dr ++ ")" showFR _ (PackageRequiresMissingComponent qpn comp) = " (requires " ++ showExposedComponent comp ++ " from " ++ showQPN qpn ++ ", but the component does not exist)" +showFR _ (PackageRequiresPrivateComponent qpn comp) = " (requires " ++ showExposedComponent comp ++ " from " ++ showQPN qpn ++ ", but the component is private)" showFR _ (PackageRequiresUnbuildableComponent qpn comp) = " (requires " ++ showExposedComponent comp ++ " from " ++ showQPN qpn ++ ", but the component is not buildable in the current environment)" showFR _ CannotInstall = " (only already installed instances can be used)" showFR _ CannotReinstall = " (avoiding to reinstall a package with same version but new dependencies)" @@ -247,8 +250,9 @@ showFR _ EmptyGoalChoice = " (INTERNAL ERROR: EMPTY GOAL CHOICE)" showExposedComponent :: ExposedComponent -> String -showExposedComponent ExposedLib = "library" -showExposedComponent (ExposedExe name) = "executable '" ++ unUnqualComponentName name ++ "'" +showExposedComponent (ExposedLib LMainLibName) = "library" +showExposedComponent (ExposedLib (LSubLibName name)) = "library '" ++ unUnqualComponentName name ++ "'" +showExposedComponent (ExposedExe name) = "executable '" ++ unUnqualComponentName name ++ "'" constraintSource :: ConstraintSource -> String constraintSource src = "constraint from " ++ showConstraintSource src @@ -257,8 +261,9 @@ showConflictingDep (ConflictingDep dr (PkgComponent qpn comp) ci) = let DependencyReason qpn' _ _ = dr componentStr = case comp of - ExposedExe exe -> " (exe " ++ unUnqualComponentName exe ++ ")" - ExposedLib -> "" + ExposedExe exe -> " (exe " ++ unUnqualComponentName exe ++ ")" + ExposedLib LMainLibName -> "" + ExposedLib (LSubLibName lib) -> " (lib " ++ unUnqualComponentName lib ++ ")" in case ci of Fixed i -> (if qpn /= qpn' then showDependencyReason dr ++ " => " else "") ++ showQPN qpn ++ componentStr ++ "==" ++ showI i diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Preference.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Preference.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Preference.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Preference.hs 2020-05-29 20:33:21.000000000 +0000 @@ -21,11 +21,9 @@ import Prelude () import Distribution.Solver.Compat.Prelude -import Data.Function (on) import qualified Data.List as L import qualified Data.Map as M -import Control.Monad.Reader hiding (sequence) -import Data.Traversable (sequence) +import Control.Monad.Trans.Reader (Reader, runReader, ask, local) import Distribution.PackageDescription (lookupFlagAssignment, unFlagAssignment) -- from Cabal @@ -462,7 +460,7 @@ -- We just verify package choices. go (PChoiceF qpn rdm gr cs) = - PChoice qpn rdm gr <$> sequence (W.mapWithKey (goP qpn) cs) + PChoice qpn rdm gr <$> sequenceA (W.mapWithKey (goP qpn) cs) go _otherwise = innM _otherwise diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/RetryLog.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/RetryLog.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/RetryLog.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/RetryLog.hs 2020-05-29 20:33:21.000000000 +0000 @@ -11,6 +11,9 @@ , tryWith ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Solver.Modular.Message import Distribution.Solver.Types.Progress diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Solver.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Solver.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Solver.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Solver.hs 2020-05-29 20:33:21.000000000 +0000 @@ -9,6 +9,9 @@ , PruneAfterFirstSuccess(..) ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import qualified Data.Map as M import qualified Data.List as L import qualified Data.Set as S diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Tree.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Tree.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Tree.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Tree.hs 2020-05-29 20:33:21.000000000 +0000 @@ -102,8 +102,10 @@ | NewPackageDoesNotMatchExistingConstraint ConflictingDep | ConflictingConstraints ConflictingDep ConflictingDep | NewPackageIsMissingRequiredComponent ExposedComponent (DependencyReason QPN) + | NewPackageHasPrivateRequiredComponent ExposedComponent (DependencyReason QPN) | NewPackageHasUnbuildableRequiredComponent ExposedComponent (DependencyReason QPN) | PackageRequiresMissingComponent QPN ExposedComponent + | PackageRequiresPrivateComponent QPN ExposedComponent | PackageRequiresUnbuildableComponent QPN ExposedComponent | CannotInstall | CannotReinstall diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Validate.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Validate.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Validate.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Validate.hs 2020-05-29 20:33:21.000000000 +0000 @@ -14,6 +14,7 @@ import Control.Applicative import Control.Monad.Reader hiding (sequence) +import Data.Either (lefts) import Data.Function (on) import Data.Traversable import Prelude hiding (sequence) @@ -38,6 +39,7 @@ import Distribution.Solver.Types.PackagePath import Distribution.Solver.Types.PkgConfigDb (PkgConfigDb, pkgConfigPkgIsPresent) +import Distribution.Types.LibraryName import Distribution.Types.PkgconfigVersionRange #ifdef DEBUG_CONFLICT_SETS @@ -110,8 +112,9 @@ pa :: PreAssignment, -- Map from package name to the components that are provided by the chosen - -- instance of that package, and whether those components are buildable. - availableComponents :: Map QPN (Map ExposedComponent IsBuildable), + -- instance of that package, and whether those components are visible and + -- buildable. + availableComponents :: Map QPN (Map ExposedComponent ComponentInfo), -- Map from package name to the components that are required from that -- package. @@ -301,20 +304,29 @@ local (\ s -> s { pa = PA nppa pfa npsa, requiredComponents = rComps' }) r -- | Check that a newly chosen package instance contains all components that --- are required from that package so far. The components must also be buildable. +-- are required from that package so far. The components must also be visible +-- and buildable. checkComponentsInNewPackage :: ComponentDependencyReasons -> QPN - -> Map ExposedComponent IsBuildable + -> Map ExposedComponent ComponentInfo -> Either Conflict () checkComponentsInNewPackage required qpn providedComps = case M.toList $ deleteKeys (M.keys providedComps) required of (missingComp, dr) : _ -> Left $ mkConflict missingComp dr NewPackageIsMissingRequiredComponent [] -> - case M.toList $ deleteKeys buildableProvidedComps required of - (unbuildableComp, dr) : _ -> - Left $ mkConflict unbuildableComp dr NewPackageHasUnbuildableRequiredComponent - [] -> Right () + let failures = lefts + [ case () of + _ | compIsVisible compInfo == IsVisible False -> + Left $ mkConflict comp dr NewPackageHasPrivateRequiredComponent + | compIsBuildable compInfo == IsBuildable False -> + Left $ mkConflict comp dr NewPackageHasUnbuildableRequiredComponent + | otherwise -> Right () + | let merged = M.intersectionWith (,) required providedComps + , (comp, (dr, compInfo)) <- M.toList merged ] + in case failures of + failure : _ -> Left failure + [] -> Right () where mkConflict :: ExposedComponent -> DependencyReason QPN @@ -323,9 +335,6 @@ mkConflict comp dr mkFailure = (CS.insert (P qpn) (dependencyReasonToConflictSet dr), mkFailure comp dr) - buildableProvidedComps :: [ExposedComponent] - buildableProvidedComps = [comp | (comp, IsBuildable True) <- M.toList providedComps] - deleteKeys :: Ord k => [k] -> Map k v -> Map k v deleteKeys ks m = L.foldr M.delete m ks @@ -411,13 +420,15 @@ -- the solver chooses foo-2.0, it tries to add the constraint foo==2.0. -- -- TODO: The new constraint is implemented as a dependency from foo to foo's --- library. That isn't correct, because foo might only be needed as a build +-- main library. That isn't correct, because foo might only be needed as a build -- tool dependency. The implemention may need to change when we support -- component-based dependency solving. extendWithPackageChoice :: PI QPN -> PPreAssignment -> Either Conflict PPreAssignment extendWithPackageChoice (PI qpn i) ppa = let mergedDep = M.findWithDefault (MergedDepConstrained []) qpn ppa - newChoice = PkgDep (DependencyReason qpn M.empty S.empty) (PkgComponent qpn ExposedLib) (Fixed i) + newChoice = PkgDep (DependencyReason qpn M.empty S.empty) + (PkgComponent qpn (ExposedLib LMainLibName)) + (Fixed i) in case (\ x -> M.insert qpn x ppa) <$> merge mergedDep newChoice of Left (c, (d, _d')) -> -- Don't include the package choice in the -- FailReason, because it is redundant. @@ -521,9 +532,9 @@ -- | Takes a list of new dependencies and uses it to try to update the map of -- known component dependencies. It returns a failure when a new dependency --- requires a component that is missing or unbuildable in a previously chosen --- packages. -extendRequiredComponents :: Map QPN (Map ExposedComponent IsBuildable) +-- requires a component that is missing, private, or unbuildable in a previously +-- chosen package. +extendRequiredComponents :: Map QPN (Map ExposedComponent ComponentInfo) -> Map QPN ComponentDependencyReasons -> [LDep QPN] -> Either Conflict (Map QPN ComponentDependencyReasons) @@ -534,16 +545,21 @@ -> Either Conflict (Map QPN ComponentDependencyReasons) extendSingle required (LDep dr (Dep (PkgComponent qpn comp) _)) = let compDeps = M.findWithDefault M.empty qpn required + success = Right $ M.insertWith M.union qpn (M.insert comp dr compDeps) required in -- Only check for the existence of the component if its package has -- already been chosen. case M.lookup qpn available of - Just comps - | M.notMember comp comps -> - Left $ mkConflict qpn comp dr PackageRequiresMissingComponent - | L.notElem comp (buildableComps comps) -> - Left $ mkConflict qpn comp dr PackageRequiresUnbuildableComponent - _ -> - Right $ M.insertWith M.union qpn (M.insert comp dr compDeps) required + Just comps -> + case M.lookup comp comps of + Nothing -> + Left $ mkConflict qpn comp dr PackageRequiresMissingComponent + Just compInfo + | compIsVisible compInfo == IsVisible False -> + Left $ mkConflict qpn comp dr PackageRequiresPrivateComponent + | compIsBuildable compInfo == IsBuildable False -> + Left $ mkConflict qpn comp dr PackageRequiresUnbuildableComponent + | otherwise -> success + Nothing -> success extendSingle required _ = Right required mkConflict :: QPN @@ -554,9 +570,6 @@ mkConflict qpn comp dr mkFailure = (CS.insert (P qpn) (dependencyReasonToConflictSet dr), mkFailure qpn comp) - buildableComps :: Map comp IsBuildable -> [comp] - buildableComps comps = [comp | (comp, IsBuildable True) <- M.toList comps] - -- | Interface. validateTree :: CompilerInfo -> Index -> PkgConfigDb -> Tree d c -> Tree d c diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Version.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Version.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Version.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular/Version.hs 2020-05-29 20:33:21.000000000 +0000 @@ -11,6 +11,9 @@ , (.||.) ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import qualified Distribution.Version as CV -- from Cabal import Distribution.Pretty (prettyShow) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Modular.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Modular.hs 2020-05-29 20:33:21.000000000 +0000 @@ -17,7 +17,6 @@ import qualified Data.Map as M import Data.Set (isSubsetOf) -import Data.Ord import Distribution.Compat.Graph ( IsNode(..) ) import Distribution.Compiler diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ConstraintSource.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ConstraintSource.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ConstraintSource.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ConstraintSource.hs 2020-05-29 20:33:21.000000000 +0000 @@ -4,9 +4,8 @@ , showConstraintSource ) where -import GHC.Generics (Generic) -import Distribution.Compat.Binary (Binary) -import Distribution.Utils.Structured (Structured) +import Distribution.Solver.Compat.Prelude +import Prelude () -- | Source of a 'PackageConstraint'. data ConstraintSource = diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/DependencyResolver.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/DependencyResolver.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/DependencyResolver.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/DependencyResolver.hs 2020-05-29 20:33:21.000000000 +0000 @@ -2,7 +2,8 @@ ( DependencyResolver ) where -import Data.Set (Set) +import Distribution.Solver.Compat.Prelude +import Prelude () import Distribution.Solver.Types.LabeledPackageConstraint import Distribution.Solver.Types.PkgConfigDb ( PkgConfigDb ) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Flag.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Flag.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Flag.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Flag.hs 2020-05-29 20:33:21.000000000 +0000 @@ -2,5 +2,7 @@ ( FlagType(..) ) where +import Prelude (Eq, Show) + data FlagType = Manual | Automatic deriving (Eq, Show) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstalledPreference.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstalledPreference.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstalledPreference.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstalledPreference.hs 2020-05-29 20:33:21.000000000 +0000 @@ -2,6 +2,8 @@ ( InstalledPreference(..), ) where +import Prelude (Show) + -- | Whether we prefer an installed version of a package or simply the latest -- version. -- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstSolverPackage.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstSolverPackage.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstSolverPackage.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/InstSolverPackage.hs 2020-05-29 20:33:21.000000000 +0000 @@ -3,8 +3,9 @@ ( InstSolverPackage(..) ) where -import Distribution.Compat.Binary (Binary(..)) -import Distribution.Utils.Structured (Structured) +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Package ( Package(..), HasMungedPackageId(..), HasUnitId(..) ) import Distribution.Solver.Types.ComponentDeps ( ComponentDeps ) import Distribution.Solver.Types.SolverId @@ -12,7 +13,6 @@ import Distribution.Types.PackageId import Distribution.Types.MungedPackageName import Distribution.InstalledPackageInfo (InstalledPackageInfo) -import GHC.Generics (Generic) -- | An 'InstSolverPackage' is a pre-existing installed package -- specified by the dependency solver. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/OptionalStanza.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/OptionalStanza.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/OptionalStanza.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/OptionalStanza.hs 2020-05-29 20:33:21.000000000 +0000 @@ -6,13 +6,10 @@ , enableStanzas ) where -import GHC.Generics (Generic) -import Data.Typeable -import Distribution.Compat.Binary (Binary) +import Distribution.Solver.Compat.Prelude +import Prelude () import Distribution.Types.ComponentRequestedSpec (ComponentRequestedSpec(..), defaultComponentRequestedSpec) -import Data.List (foldl') -import Distribution.Utils.Structured (Structured) data OptionalStanza = TestStanzas diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageConstraint.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageConstraint.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageConstraint.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageConstraint.hs 2020-05-29 20:33:21.000000000 +0000 @@ -18,20 +18,18 @@ packageConstraintToDependency ) where -import Distribution.Compat.Binary (Binary) +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Package (PackageName) import Distribution.PackageDescription (FlagAssignment, dispFlagAssignment) import Distribution.Pretty (flatStyle, pretty) import Distribution.Types.PackageVersionConstraint (PackageVersionConstraint (..)) -import Distribution.Utils.Structured (Structured) import Distribution.Version (VersionRange, simplifyVersionRange) -import Distribution.Solver.Compat.Prelude ((<<>>)) import Distribution.Solver.Types.OptionalStanza import Distribution.Solver.Types.PackagePath -import GHC.Generics (Generic) -import Text.PrettyPrint ((<+>)) import qualified Text.PrettyPrint as Disp diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageIndex.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageIndex.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageIndex.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackageIndex.hs 2020-05-29 20:33:21.000000000 +0000 @@ -61,7 +61,7 @@ import Distribution.Version ( VersionRange, withinRange ) import Distribution.Simple.Utils - ( lowercase, comparing ) + ( lowercase ) import qualified Prelude (foldr1) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackagePath.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackagePath.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackagePath.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PackagePath.hs 2020-05-29 20:33:21.000000000 +0000 @@ -9,10 +9,11 @@ , showQPN ) where -import Distribution.Package +import Distribution.Solver.Compat.Prelude +import Prelude () +import Distribution.Package (PackageName) import Distribution.Pretty (pretty, flatStyle) import qualified Text.PrettyPrint as Disp -import Distribution.Solver.Compat.Prelude ((<<>>)) -- | A package path consists of a namespace and a package path inside that -- namespace. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PkgConfigDb.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PkgConfigDb.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PkgConfigDb.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/PkgConfigDb.hs 2020-05-29 20:33:21.000000000 +0000 @@ -23,7 +23,7 @@ import Distribution.Solver.Compat.Prelude import Prelude () -import Control.Exception (IOException, handle) +import Control.Exception (handle) import qualified Data.Map as M import System.FilePath (splitSearchPath) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ResolverPackage.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ResolverPackage.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ResolverPackage.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/ResolverPackage.hs 2020-05-29 20:33:21.000000000 +0000 @@ -6,17 +6,17 @@ , resolverPackageExeDeps ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Solver.Types.InstSolverPackage import Distribution.Solver.Types.SolverId import Distribution.Solver.Types.SolverPackage import qualified Distribution.Solver.Types.ComponentDeps as CD -import Distribution.Compat.Binary (Binary) -import Distribution.Utils.Structured (Structured) import Distribution.Compat.Graph (IsNode(..)) import Distribution.Package (Package(..), HasUnitId(..)) import Distribution.Simple.Utils (ordNub) -import GHC.Generics (Generic) -- | The dependency resolver picks either pre-existing installed packages -- or it picks source packages along with package configuration. diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Settings.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Settings.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Settings.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Settings.hs 2020-05-29 20:33:21.000000000 +0000 @@ -15,12 +15,12 @@ , SolveExecutables(..) ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Simple.Setup ( BooleanFlag(..) ) -import Distribution.Compat.Binary (Binary) -import Distribution.Utils.Structured (Structured) import Distribution.Pretty ( Pretty(pretty) ) import Distribution.Parsec ( Parsec(parsec) ) -import GHC.Generics (Generic) import qualified Distribution.Compat.CharParsing as P import qualified Text.PrettyPrint as PP diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverId.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverId.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverId.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverId.hs 2020-05-29 20:33:21.000000000 +0000 @@ -5,10 +5,10 @@ where -import Distribution.Compat.Binary (Binary) -import Distribution.Utils.Structured (Structured) +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Package (PackageId, Package(..), UnitId) -import GHC.Generics (Generic) -- | The solver can produce references to existing packages or -- packages we plan to install. Unlike 'ConfiguredId' we don't diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverPackage.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverPackage.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverPackage.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SolverPackage.hs 2020-05-29 20:33:21.000000000 +0000 @@ -3,15 +3,15 @@ ( SolverPackage(..) ) where -import Distribution.Compat.Binary (Binary) -import Distribution.Utils.Structured (Structured) +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Package ( Package(..) ) import Distribution.PackageDescription ( FlagAssignment ) import Distribution.Solver.Types.ComponentDeps ( ComponentDeps ) import Distribution.Solver.Types.OptionalStanza import Distribution.Solver.Types.SolverId import Distribution.Solver.Types.SourcePackage -import GHC.Generics (Generic) -- | A 'SolverPackage' is a package specified by the dependency solver. -- It will get elaborated into a 'ConfiguredPackage' or even an diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SourcePackage.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SourcePackage.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SourcePackage.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/SourcePackage.hs 2020-05-29 20:33:21.000000000 +0000 @@ -5,16 +5,15 @@ , SourcePackage(..) ) where +import Distribution.Solver.Compat.Prelude +import Prelude () + import Distribution.Package ( PackageId, Package(..) ) import Distribution.PackageDescription ( GenericPackageDescription(..) ) import Data.ByteString.Lazy (ByteString) -import GHC.Generics (Generic) -import Distribution.Compat.Binary (Binary) -import Data.Typeable -import Distribution.Utils.Structured (Structured) -- | A package description along with the location of the package sources. -- diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Variable.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Variable.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Variable.hs 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/Distribution/Solver/Types/Variable.hs 2020-05-29 20:33:21.000000000 +0000 @@ -1,5 +1,7 @@ module Distribution.Solver.Types.Variable where +import Prelude (Eq, Show) + import Distribution.Solver.Types.OptionalStanza import Distribution.PackageDescription (FlagName) diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/main/Main.hs cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/main/Main.hs --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/main/Main.hs 2020-05-17 22:38:08.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/main/Main.hs 2020-05-29 20:33:21.000000000 +0000 @@ -163,15 +163,13 @@ import Distribution.Compat.ResponseFile import System.Environment (getArgs, getProgName) -import System.Exit (exitFailure, exitSuccess) import System.FilePath ( dropExtension, splitExtension , takeExtension, (), (<.>) ) import System.IO ( BufferMode(LineBuffering), hSetBuffering , stderr, stdout ) import System.Directory (doesFileExist, getCurrentDirectory) import Data.Monoid (Any(..)) -import Control.Exception (SomeException(..), try) -import Control.Monad (mapM_) +import Control.Exception (try) import Data.Version (showVersion) -- | Entry point @@ -978,16 +976,16 @@ userConfigAction :: UserConfigFlags -> [String] -> Action userConfigAction ucflags extraArgs globalFlags = do let verbosity = fromFlag (userConfigVerbosity ucflags) - force = fromFlag (userConfigForce ucflags) + frc = fromFlag (userConfigForce ucflags) extraLines = fromFlag (userConfigAppendLines ucflags) case extraArgs of ("init":_) -> do path <- configFile fileExists <- doesFileExist path - if (not fileExists || (fileExists && force)) + if (not fileExists || (fileExists && frc)) then void $ createDefaultConfigFile verbosity extraLines path else die' verbosity $ path ++ " already exists." - ("diff":_) -> mapM_ putStrLn =<< userConfigDiff verbosity globalFlags extraLines + ("diff":_) -> traverse_ putStrLn =<< userConfigDiff verbosity globalFlags extraLines ("update":_) -> userConfigUpdate verbosity globalFlags extraLines -- Error handling. [] -> die' verbosity $ "Please specify a subcommand (see 'help user-config')" diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/p.cabal cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/p.cabal --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/p.cabal 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/p.cabal 2020-05-29 20:33:21.000000000 +0000 @@ -10,3 +10,8 @@ executable pexe main-is: Main.hs other-modules: PMain + +executable ppexe + main-is: Main.hs + hs-source-dirs: app + other-modules: PMain \ No newline at end of file diff -Nru cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/q/q.cabal cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/q/q.cabal --- cabal-install-head-3.3+git20200515.2.f6f78d1/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/q/q.cabal 2020-05-17 22:38:09.000000000 +0000 +++ cabal-install-head-3.3+git20200529.2.36ab7a0/src/cabal-install-3.3.0.0/tests/IntegrationTests2/targets/simple/q/q.cabal 2020-05-29 20:33:21.000000000 +0000 @@ -5,6 +5,7 @@ library exposed-modules: QQ + other-modules: Q build-depends: base executable qexe