cabal-install 2.0.0.0 → 2.0.0.1
raw patch · 23 files changed
+719/−74 lines, 23 filesdep ~Cabaldep ~tastydep ~tasty-hunit
Dependency ranges changed: Cabal, tasty, tasty-hunit
Files
- Distribution/Client/Config.hs +2/−1
- Distribution/Client/Configure.hs +1/−1
- Distribution/Client/DistDirLayout.hs +13/−8
- Distribution/Client/GlobalFlags.hs +4/−2
- Distribution/Client/IndexUtils.hs +97/−14
- Distribution/Client/Install.hs +5/−4
- Distribution/Client/ProjectConfig.hs +2/−2
- Distribution/Client/ProjectConfig/Legacy.hs +16/−5
- Distribution/Client/ProjectConfig/Types.hs +2/−1
- Distribution/Client/ProjectOrchestration.hs +11/−3
- Distribution/Client/Setup.hs +5/−0
- Distribution/Client/SetupWrapper.hs +3/−0
- Distribution/Client/Upload.hs +20/−1
- Distribution/Solver/Modular/IndexConversion.hs +30/−1
- Distribution/Solver/Modular/Message.hs +1/−0
- Distribution/Solver/Modular/Tree.hs +1/−0
- bootstrap.sh +1/−1
- cabal-install.cabal +352/−11
- changelog +108/−2
- tests/IntegrationTests2.hs +4/−4
- tests/UnitTests/Distribution/Client/FileMonitor.hs +2/−2
- tests/UnitTests/Distribution/Client/Glob.hs +2/−2
- tests/UnitTests/Distribution/Client/ProjectConfig.hs +37/−9
Distribution/Client/Config.hs view
@@ -228,7 +228,8 @@ globalIgnoreSandbox = combine globalIgnoreSandbox, globalIgnoreExpiry = combine globalIgnoreExpiry, globalHttpTransport = combine globalHttpTransport,- globalNix = combine globalNix+ globalNix = combine globalNix,+ globalStoreDir = combine globalStoreDir } where combine = combine' savedGlobalFlags
Distribution/Client/Configure.hs view
@@ -141,7 +141,7 @@ warn verbosity $ "solver failed to find a solution:\n" ++ message- ++ "Trying configure anyway."+ ++ "\nTrying configure anyway." setupWrapper verbosity (setupScriptOptions installedPkgIndex Nothing) Nothing configureCommand (const configFlags) extraArgs
Distribution/Client/DistDirLayout.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RecordWildCards #-} --- | +-- | -- -- The layout of the .\/dist\/ directory where cabal keeps all of it's state -- and build artifacts.@@ -18,7 +18,8 @@ -- * 'CabalDirLayout' CabalDirLayout(..),- defaultCabalDirLayout,+ mkCabalDirLayout,+ defaultCabalDirLayout ) where import Data.Maybe (fromMaybe)@@ -243,12 +244,16 @@ defaultCabalDirLayout :: FilePath -> CabalDirLayout defaultCabalDirLayout cabalDir =+ mkCabalDirLayout cabalDir Nothing Nothing++mkCabalDirLayout :: FilePath -- ^ Cabal directory+ -> Maybe FilePath -- ^ Store directory+ -> Maybe FilePath -- ^ Log directory+ -> CabalDirLayout+mkCabalDirLayout cabalDir mstoreDir mlogDir = CabalDirLayout {..} where-- cabalStoreDirLayout = defaultStoreDirLayout (cabalDir </> "store")-- cabalLogsDirectory = cabalDir </> "logs"-+ cabalStoreDirLayout =+ defaultStoreDirLayout (fromMaybe (cabalDir </> "store") mstoreDir)+ cabalLogsDirectory = fromMaybe (cabalDir </> "logs") mlogDir cabalWorldFile = cabalDir </> "world"-
Distribution/Client/GlobalFlags.hs view
@@ -68,7 +68,8 @@ globalIgnoreSandbox :: Flag Bool, globalIgnoreExpiry :: Flag Bool, -- ^ Ignore security expiry dates globalHttpTransport :: Flag String,- globalNix :: Flag Bool -- ^ Integrate with Nix+ globalNix :: Flag Bool, -- ^ Integrate with Nix+ globalStoreDir :: Flag FilePath } deriving Generic defaultGlobalFlags :: GlobalFlags@@ -87,7 +88,8 @@ globalIgnoreSandbox = Flag False, globalIgnoreExpiry = Flag False, globalHttpTransport = mempty,- globalNix = Flag False+ globalNix = Flag False,+ globalStoreDir = mempty } instance Monoid GlobalFlags where
Distribution/Client/IndexUtils.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE GADTs #-} -----------------------------------------------------------------------------@@ -53,7 +54,8 @@ import Distribution.Types.Dependency import Distribution.Simple.PackageIndex (InstalledPackageIndex) import Distribution.PackageDescription- ( GenericPackageDescription )+ ( GenericPackageDescription(..)+ , PackageDescription(..), emptyPackageDescription ) import Distribution.Simple.Compiler ( Compiler, PackageDBStack ) import Distribution.Simple.Program@@ -61,7 +63,7 @@ import qualified Distribution.Simple.Configure as Configure ( getInstalledPackages, getInstalledPackagesMonitorFiles ) import Distribution.Version- ( mkVersion, intersectVersionRanges )+ ( Version, mkVersion, intersectVersionRanges, versionNumbers ) import Distribution.Text ( display, simpleParse ) import Distribution.Simple.Utils@@ -94,6 +96,7 @@ import qualified Data.ByteString.Lazy as BS import qualified Data.ByteString.Lazy.Char8 as BS.Char8 import qualified Data.ByteString.Char8 as BSS+import qualified Data.ByteString as BSW8 import Data.ByteString.Lazy (ByteString) import Distribution.Client.GZipUtils (maybeDecompress) import Distribution.Client.Utils ( byteStringToFilePath@@ -678,7 +681,7 @@ -- Most of the time we only need the package id. ~(pkg, pkgtxt) <- unsafeInterleaveIO $ do pkgtxt <- getEntryContent blockno- pkg <- readPackageDescription pkgtxt+ pkg <- readPackageDescription pkgid pkgtxt return (pkg, pkgtxt) case mode of ReadPackageIndexLazyIO -> pure ()@@ -710,22 +713,102 @@ -> return content _ -> interror "unexpected tar entry type" - readPackageDescription :: ByteString -> IO GenericPackageDescription- readPackageDescription content =+ interror :: String -> IO a+ interror msg = die' verbosity $ "internal error when reading package index: " ++ msg+ ++ "The package index or index cache is probably "+ ++ "corrupt. Running cabal update might fix it."++ readPackageDescription pkgid content = do+ case parseGenericPackageDescription' content of+ ParseGPDOk gpd -> return gpd+ ParseError (Just specVer) | specVer >= mkVersion [2,0]+ -> return (dummyPackageDescription specVer)+ ParseError _ -> interror "failed to parse .cabal file"+ where+ dummyPackageDescription :: Version -> GenericPackageDescription+ dummyPackageDescription specVer = GenericPackageDescription+ { packageDescription = emptyPackageDescription+ { specVersionRaw = Left specVer+ , package = pkgid+ , synopsis = dummySynopsis+ }+ , genPackageFlags = []+ , condLibrary = Nothing+ , condSubLibraries = []+ , condForeignLibs = []+ , condExecutables = []+ , condTestSuites = []+ , condBenchmarks = []+ }++ dummySynopsis = "<could not be parsed due to unsupported CABAL spec-version>"++-- | Result of 'parseGenericPackageDescription''+data ParseGPDResult = ParseGPDOk GenericPackageDescription+ -- ^ parsing succeeded (may still have unsupported spec-version)+ | ParseError !(Maybe Version)+ -- ^ parsing failed, but we were able to recover+ -- a new-style spec-version declaration++-- | Variant of 'parseGenericPackageDescription' which is able to+-- extract new-style spec-version in case of parser errors+parseGenericPackageDescription' :: ByteString -> ParseGPDResult+parseGenericPackageDescription' content =+ case parseGPDMaybe of+ Just gpd -> ParseGPDOk gpd+ Nothing -> ParseError (scanSpecVersion content)+ where+ parseGPDMaybe = #ifdef CABAL_PARSEC- case parseGenericPackageDescriptionMaybe (BS.toStrict content) of- Just gpd -> return gpd- Nothing -> interror "failed to parse .cabal file"+ parseGenericPackageDescriptionMaybe (BS.toStrict content) #else case parseGenericPackageDescription . ignoreBOM . fromUTF8 . BS.Char8.unpack $ content of- ParseOk _ d -> return d- _ -> interror "failed to parse .cabal file"+ ParseOk _ d -> Just d+ _ -> Nothing #endif - interror :: String -> IO a- interror msg = die' verbosity $ "internal error when reading package index: " ++ msg- ++ "The package index or index cache is probably "- ++ "corrupt. Running cabal update might fix it."+-- | Quickly scan new-style spec-version+--+-- A new-style spec-version declaration begins the .cabal file and+-- follow the following case-insensitive grammar (expressed in+-- RFC5234 ABNF):+--+-- newstyle-spec-version-decl = "cabal-version" *WS ":" *WS newstyle-pec-version *WS+--+-- spec-version = NUM "." NUM [ "." NUM ]+--+-- NUM = DIGIT0 / DIGITP 1*DIGIT0+-- DIGIT0 = %x30-39+-- DIGITP = %x31-39+-- WS = %20+--+-- TODO: move into lib:Cabal+scanSpecVersion :: ByteString -> Maybe Version+scanSpecVersion bs = do+ fstline':_ <- pure (BS.Char8.lines bs)++ -- parse <newstyle-spec-version-decl>+ -- normalise: remove all whitespace, convert to lower-case+ let fstline = BSW8.map toLowerW8 $ BSW8.filter (/= 0x20) $ BS.toStrict fstline'+ ["cabal-version",vers] <- pure (BSS.split ':' fstline)++ -- parse <spec-version>+ --+ -- This is currently more tolerant regarding leading 0 digits.+ --+ ver <- simpleParse (BSS.unpack vers)+ guard $ case versionNumbers ver of+ [_,_] -> True+ [_,_,_] -> True+ _ -> False++ pure ver+ where+ -- | Translate ['A'..'Z'] to ['a'..'z']+ toLowerW8 :: Word8 -> Word8+ toLowerW8 w | 0x40 < w && w < 0x5b = w+0x20+ | otherwise = w+ ------------------------------------------------------------------------ -- Index cache data structure
Distribution/Client/Install.hs view
@@ -168,7 +168,7 @@ import Distribution.Text ( display ) import Distribution.Verbosity as Verbosity- ( Verbosity, normal, verbose )+ ( Verbosity, modifyVerbosity, normal, verbose ) import Distribution.Simple.BuildPaths ( exeExtension ) --TODO:@@ -550,8 +550,9 @@ let breaksPkgs = not (null newBrokenPkgs) let adaptedVerbosity- | containsReinstalls && not overrideReinstall = verbosity `max` verbose- | otherwise = verbosity+ | containsReinstalls+ , not overrideReinstall = modifyVerbosity (max verbose) verbosity+ | otherwise = verbosity -- We print the install plan if we are in a dry-run or if we are confronted -- with a dangerous install plan.@@ -1149,7 +1150,7 @@ -- If the user has specified --remote-build-reporting=detailed or -- --build-log, use more verbose logging. loggingVerbosity :: Verbosity- loggingVerbosity | overrideVerbosity = max Verbosity.verbose verbosity+ loggingVerbosity | overrideVerbosity = modifyVerbosity (max verbose) verbosity | otherwise = verbosity useDefaultTemplate :: Bool
Distribution/Client/ProjectConfig.hs view
@@ -105,7 +105,7 @@ import Distribution.Utils.NubList ( fromNubList ) import Distribution.Verbosity- ( Verbosity, verbose )+ ( Verbosity, modifyVerbosity, verbose ) import Distribution.Text import Distribution.ParseUtils ( ParseResult(..), locatedErrorMsg, showPWarning )@@ -334,7 +334,7 @@ -- --build-log, use more verbose logging. -- buildSettingLogVerbosity- | overrideVerbosity = max verbose verbosity+ | overrideVerbosity = modifyVerbosity (max verbose) verbosity | otherwise = verbosity overrideVerbosity
Distribution/Client/ProjectConfig/Legacy.hs view
@@ -395,7 +395,8 @@ globalLogsDir = projectConfigLogsDir, globalWorldFile = _, globalHttpTransport = projectConfigHttpTransport,- globalIgnoreExpiry = projectConfigIgnoreExpiry+ globalIgnoreExpiry = projectConfigIgnoreExpiry,+ globalStoreDir = projectConfigStoreDir } = globalFlags ConfigFlags {@@ -475,7 +476,8 @@ globalIgnoreSandbox = mempty, globalIgnoreExpiry = projectConfigIgnoreExpiry, globalHttpTransport = projectConfigHttpTransport,- globalNix = mempty+ globalNix = mempty,+ globalStoreDir = projectConfigStoreDir } configFlags = mempty {@@ -800,7 +802,7 @@ ] . filterFields [ "remote-repo-cache"- , "logs-dir", "ignore-expiry", "http-transport"+ , "logs-dir", "store-dir", "ignore-expiry", "http-transport" ] . commandOptionsToFields ) (commandOptions (globalCommand []) ParseArgs)@@ -809,13 +811,13 @@ legacyConfigureShFlags (\flags conf -> conf { legacyConfigureShFlags = flags }) . addFields- [ simpleField "allow-older"+ [ monoidField "allow-older" (maybe mempty dispRelaxDeps) (fmap Just parseRelaxDeps) (fmap unAllowOlder . configAllowOlder) (\v conf -> conf { configAllowOlder = fmap AllowOlder v }) ] . addFields- [ simpleField "allow-newer"+ [ monoidField "allow-newer" (maybe mempty dispRelaxDeps) (fmap Just parseRelaxDeps) (fmap unAllowNewer . configAllowNewer) (\v conf -> conf { configAllowNewer = fmap AllowNewer v })@@ -1255,6 +1257,15 @@ where set' xs b = set (get' b ++ xs) b showF' = separator . map showF++-- | Parser combinator for simple fields which uses the field type's+-- 'Monoid' instance for combining multiple occurences of the field.+monoidField :: Monoid a => String -> (a -> Doc) -> ReadP a a+ -> (b -> a) -> (a -> b -> b) -> FieldDescr b+monoidField name showF readF get' set =+ liftField get' set' $ ParseUtils.field name showF readF+ where+ set' xs b = set (get' b `mappend` xs) b --TODO: [code cleanup] local redefinition that should replace the version in -- D.ParseUtils. This version avoid parse ambiguity for list element parsers
Distribution/Client/ProjectConfig/Types.hs view
@@ -143,7 +143,8 @@ projectConfigHttpTransport :: Flag String, projectConfigIgnoreExpiry :: Flag Bool, projectConfigCacheDir :: Flag FilePath,- projectConfigLogsDir :: Flag FilePath+ projectConfigLogsDir :: Flag FilePath,+ projectConfigStoreDir :: Flag FilePath } deriving (Eq, Show, Generic)
Distribution/Client/ProjectOrchestration.hs view
@@ -164,8 +164,7 @@ projectRoot <- either throwIO return =<< findProjectRoot Nothing mprojectFile - let cabalDirLayout = defaultCabalDirLayout cabalDir- distDirLayout = defaultDistDirLayout projectRoot+ let distDirLayout = defaultDistDirLayout projectRoot mdistDirectory (projectConfig, localPackages) <-@@ -173,7 +172,16 @@ distDirLayout cliConfig - let buildSettings = resolveBuildTimeSettings+ let ProjectConfigBuildOnly {+ projectConfigLogsDir,+ projectConfigStoreDir+ } = projectConfigBuildOnly projectConfig++ mlogsDir = Setup.flagToMaybe projectConfigLogsDir+ mstoreDir = Setup.flagToMaybe projectConfigStoreDir+ cabalDirLayout = mkCabalDirLayout cabalDir mstoreDir mlogsDir++ buildSettings = resolveBuildTimeSettings verbosity cabalDirLayout projectConfig
Distribution/Client/Setup.hs view
@@ -366,6 +366,11 @@ "The location of the world file" globalWorldFile (\v flags -> flags { globalWorldFile = v }) (reqArgFlag "FILE")++ ,option [] ["store-dir"]+ "The location of the nix-local-build store"+ globalStoreDir (\v flags -> flags { globalStoreDir = v })+ (reqArgFlag "DIR") ] -- ------------------------------------------------------------
Distribution/Client/SetupWrapper.hs view
@@ -708,6 +708,9 @@ installedCabalVersion :: SetupScriptOptions -> Compiler -> ProgramDb -> IO (Version, Maybe InstalledPackageId ,SetupScriptOptions)+ installedCabalVersion options' _ _ | packageName pkg == mkPackageName "Cabal"+ && bt == Custom =+ return (packageVersion pkg, Nothing, options') installedCabalVersion options' compiler progdb = do index <- maybeGetInstalledPackages options' compiler progdb let cabalDep = Dependency (mkPackageName "Cabal") (useCabalVersion options')
Distribution/Client/Upload.hs view
@@ -102,6 +102,15 @@ , "/docs" ] }+ packageUri = targetRepoURI {+ uriPath = rootIfEmpty (uriPath targetRepoURI)+ FilePath.Posix.</> concat+ [ "package/", pkgid+ , case isCandidate of+ IsCandidate -> "/candidate"+ IsPublished -> ""+ ]+ } (reverseSuffix, reversePkgid) = break (== '-') (reverse (takeFileName path)) pkgid = reverse $ tail reversePkgid@@ -122,13 +131,23 @@ -- Hackage responds with 204 No Content when docs are uploaded -- successfully. (code,_) | code `elem` [200,204] -> do- notice verbosity "Ok"+ notice verbosity $ okMessage packageUri (code,err) -> do notice verbosity $ "Error uploading documentation " ++ path ++ ": " ++ "http code " ++ show code ++ "\n" ++ err exitFailure+ where+ okMessage packageUri = case isCandidate of+ IsCandidate ->+ "Documentation successfully uploaded for package candidate. "+ ++ "You can now preview the result at '" ++ show packageUri+ ++ "'. To upload non-candidate documentation, use 'cabal upload --publish'."+ IsPublished ->+ "Package documentation successfully published. You can now view it at '"+ ++ show packageUri ++ "'."+ promptUsername :: IO Username promptUsername = do
Distribution/Solver/Modular/IndexConversion.hs view
@@ -13,6 +13,7 @@ import Distribution.InstalledPackageInfo as IPI import Distribution.Package -- from Cabal import Distribution.Simple.BuildToolDepends -- from Cabal+import Distribution.Simple.Utils (cabalVersion) -- from Cabal import Distribution.Types.ExeDependency -- from Cabal import Distribution.Types.PkgconfigDependency -- from Cabal import Distribution.Types.ComponentName -- from Cabal@@ -186,8 +187,36 @@ (L.map (\(nm, ds) -> conv (ComponentBench nm) benchmarkBuildInfo ds) benchs) ++ maybe [] (convSetupBuildInfo pi) (setupBuildInfo pkg) + -- | We infer the maximally supported spec-version from @lib:Cabal@'s version+ --+ -- As we cannot predict the future, we can only properly support+ -- spec-versions predating (and including) the @lib:Cabal@ version+ -- used by @cabal-install@.+ --+ -- This relies on 'cabalVersion' having always at least 3 components to avoid+ -- comparisons like @2.0.0 > 2.0@ which would result in confusing results.+ --+ -- NOTE: Before we can switch to a /normalised/ spec-version+ -- comparison (e.g. by truncating to 3 components, and removing+ -- trailing zeroes) we'd have to make sure all other places where+ -- the spec-version is compared against a bound do it+ -- consistently.+ maxSpecVer = cabalVersion++ -- | Required/declared spec-version of the package+ --+ -- We don't truncate patch-levels, as specifying a patch-level+ -- spec-version is discouraged and not supported anymore starting+ -- with spec-version 2.2.+ reqSpecVer = specVersion pkg++ -- | A too-new specVersion is turned into a global 'FailReason'+ -- which prevents the solver from selecting this release (and if+ -- forced to, emit a meaningful solver error message).+ fr | reqSpecVer > maxSpecVer = Just (UnsupportedSpecVer reqSpecVer)+ | otherwise = Nothing in- PInfo flagged_deps fds Nothing+ PInfo flagged_deps fds fr -- | Create a flagged dependency tree from a list @fds@ of flagged -- dependencies, using @f@ to form the tree node (@f@ will be
Distribution/Solver/Modular/Message.hs view
@@ -144,6 +144,7 @@ showFR _ MultipleInstances = " (multiple instances)" showFR c (DependenciesNotLinked msg) = " (dependencies not linked: " ++ msg ++ "; conflict set: " ++ showConflictSet c ++ ")" showFR c CyclicDependencies = " (cyclic dependencies; conflict set: " ++ showConflictSet c ++ ")"+showFR _ (UnsupportedSpecVer ver) = " (unsupported spec-version " ++ display ver ++ ")" -- The following are internal failures. They should not occur. In the -- interest of not crashing unnecessarily, we still just print an error -- message though.
Distribution/Solver/Modular/Tree.hs view
@@ -111,6 +111,7 @@ | MultipleInstances | DependenciesNotLinked String | CyclicDependencies+ | UnsupportedSpecVer Ver deriving (Eq, Show) -- | Functor for the tree type. 'a' is the type of nodes' children. 'd' and 'c'
bootstrap.sh view
@@ -233,7 +233,7 @@ # >= 2.0 && < 2.7 NETWORK_URI_VER="2.6.1.0"; NETWORK_URI_VER_REGEXP="2\.6\." # >= 2.6 && < 2.7-CABAL_VER="2.0.0.2"; CABAL_VER_REGEXP="2\.0\.[0-9]"+CABAL_VER="2.0.1.0"; CABAL_VER_REGEXP="2\.0\.[0-9]" # >= 2.0 && < 2.1 TRANS_VER="0.5.4.0"; TRANS_VER_REGEXP="0\.[45]\." # >= 0.2.* && < 0.6
cabal-install.cabal view
@@ -1,5 +1,5 @@ Name: cabal-install-Version: 2.0.0.0+Version: 2.0.0.1 Synopsis: The command-line interface for Cabal and Hackage. Description: The \'cabal\' command-line program simplifies the process of managing@@ -410,8 +410,8 @@ random, tagged, tar,- tasty,- tasty-hunit,+ tasty >= 0.12,+ tasty-hunit >= 0.10, tasty-quickcheck, time, zlib@@ -425,7 +425,107 @@ hs-source-dirs: tests, . ghc-options: -Wall -fwarn-tabs -main-is UnitTests other-modules:+ Distribution.Client.BuildReports.Anonymous+ Distribution.Client.BuildReports.Storage+ Distribution.Client.BuildReports.Types+ Distribution.Client.Compat.ExecutablePath Distribution.Client.Compat.FileLock+ Distribution.Client.Compat.FilePerms+ Distribution.Client.Compat.Prelude+ Distribution.Client.Compat.Semaphore+ Distribution.Client.Config+ Distribution.Client.Configure+ Distribution.Client.Dependency+ Distribution.Client.Dependency.Types+ Distribution.Client.DistDirLayout+ Distribution.Client.FetchUtils+ Distribution.Client.FileMonitor+ Distribution.Client.GZipUtils+ Distribution.Client.Glob+ Distribution.Client.GlobalFlags+ Distribution.Client.Haddock+ Distribution.Client.HttpUtils+ Distribution.Client.IndexUtils+ Distribution.Client.IndexUtils.Timestamp+ Distribution.Client.Init.Types+ Distribution.Client.Install+ Distribution.Client.InstallPlan+ Distribution.Client.InstallSymlink+ Distribution.Client.JobControl+ Distribution.Client.PackageUtils+ Distribution.Client.ParseUtils+ Distribution.Client.ProjectConfig+ Distribution.Client.ProjectConfig.Legacy+ Distribution.Client.ProjectConfig.Types+ Distribution.Client.RebuildMonad+ Distribution.Client.Sandbox+ Distribution.Client.Sandbox.Index+ Distribution.Client.Sandbox.PackageEnvironment+ Distribution.Client.Sandbox.Timestamp+ Distribution.Client.Sandbox.Types+ Distribution.Client.SavedFlags+ Distribution.Client.Security.DNS+ Distribution.Client.Security.HTTP+ Distribution.Client.Setup+ Distribution.Client.SetupWrapper+ Distribution.Client.SolverInstallPlan+ Distribution.Client.SrcDist+ Distribution.Client.Store+ Distribution.Client.Tar+ Distribution.Client.Targets+ Distribution.Client.Types+ Distribution.Client.Utils+ Distribution.Client.Utils.Assertion+ Distribution.Client.Win32SelfUpgrade+ Distribution.Client.World+ Distribution.Solver.Modular+ Distribution.Solver.Modular.Assignment+ Distribution.Solver.Modular.Builder+ Distribution.Solver.Modular.Configured+ Distribution.Solver.Modular.ConfiguredConversion+ Distribution.Solver.Modular.ConflictSet+ Distribution.Solver.Modular.Cycles+ Distribution.Solver.Modular.Dependency+ Distribution.Solver.Modular.Explore+ Distribution.Solver.Modular.Flag+ Distribution.Solver.Modular.Index+ Distribution.Solver.Modular.IndexConversion+ Distribution.Solver.Modular.LabeledGraph+ Distribution.Solver.Modular.Linking+ Distribution.Solver.Modular.Log+ Distribution.Solver.Modular.Message+ Distribution.Solver.Modular.PSQ+ Distribution.Solver.Modular.Package+ Distribution.Solver.Modular.Preference+ Distribution.Solver.Modular.RetryLog+ Distribution.Solver.Modular.Solver+ Distribution.Solver.Modular.Tree+ Distribution.Solver.Modular.Validate+ Distribution.Solver.Modular.Var+ Distribution.Solver.Modular.Version+ Distribution.Solver.Modular.WeightedPSQ+ Distribution.Solver.Types.ComponentDeps+ Distribution.Solver.Types.ConstraintSource+ Distribution.Solver.Types.DependencyResolver+ Distribution.Solver.Types.Flag+ Distribution.Solver.Types.InstSolverPackage+ Distribution.Solver.Types.InstalledPreference+ Distribution.Solver.Types.LabeledPackageConstraint+ Distribution.Solver.Types.OptionalStanza+ Distribution.Solver.Types.PackageConstraint+ Distribution.Solver.Types.PackageFixedDeps+ Distribution.Solver.Types.PackageIndex+ Distribution.Solver.Types.PackagePath+ Distribution.Solver.Types.PackagePreferences+ Distribution.Solver.Types.PkgConfigDb+ Distribution.Solver.Types.Progress+ Distribution.Solver.Types.ResolverPackage+ Distribution.Solver.Types.Settings+ Distribution.Solver.Types.SolverId+ Distribution.Solver.Types.SolverPackage+ Distribution.Solver.Types.SourcePackage+ Distribution.Solver.Types.Variable+ Paths_cabal_install UnitTests.Distribution.Client.ArbitraryInstances UnitTests.Distribution.Client.FileMonitor UnitTests.Distribution.Client.GZipUtils@@ -470,8 +570,8 @@ binary, random, hackage-security,- tasty,- tasty-hunit,+ tasty >= 0.12,+ tasty-hunit >= 0.10, tasty-quickcheck, tagged, QuickCheck >= 2.8.2@@ -517,6 +617,72 @@ hs-source-dirs: tests, . ghc-options: -Wall -fwarn-tabs "-with-rtsopts=-M4M -K1K" -main-is MemoryUsageTests other-modules:+ Distribution.Client.Compat.Prelude+ Distribution.Client.Dependency+ Distribution.Client.Dependency.Types+ Distribution.Client.FetchUtils+ Distribution.Client.GZipUtils+ Distribution.Client.GlobalFlags+ Distribution.Client.HttpUtils+ Distribution.Client.PackageUtils+ Distribution.Client.Sandbox.Types+ Distribution.Client.Security.DNS+ Distribution.Client.Security.HTTP+ Distribution.Client.SolverInstallPlan+ Distribution.Client.Tar+ Distribution.Client.Targets+ Distribution.Client.Types+ Distribution.Client.Utils+ Distribution.Client.Utils.Assertion+ Distribution.Client.World+ Distribution.Solver.Modular+ Distribution.Solver.Modular.Assignment+ Distribution.Solver.Modular.Builder+ Distribution.Solver.Modular.Configured+ Distribution.Solver.Modular.ConfiguredConversion+ Distribution.Solver.Modular.ConflictSet+ Distribution.Solver.Modular.Cycles+ Distribution.Solver.Modular.Dependency+ Distribution.Solver.Modular.Explore+ Distribution.Solver.Modular.Flag+ Distribution.Solver.Modular.Index+ Distribution.Solver.Modular.IndexConversion+ Distribution.Solver.Modular.LabeledGraph+ Distribution.Solver.Modular.Linking+ Distribution.Solver.Modular.Log+ Distribution.Solver.Modular.Message+ Distribution.Solver.Modular.PSQ+ Distribution.Solver.Modular.Package+ Distribution.Solver.Modular.Preference+ Distribution.Solver.Modular.RetryLog+ Distribution.Solver.Modular.Solver+ Distribution.Solver.Modular.Tree+ Distribution.Solver.Modular.Validate+ Distribution.Solver.Modular.Var+ Distribution.Solver.Modular.Version+ Distribution.Solver.Modular.WeightedPSQ+ Distribution.Solver.Types.ComponentDeps+ Distribution.Solver.Types.ConstraintSource+ Distribution.Solver.Types.DependencyResolver+ Distribution.Solver.Types.Flag+ Distribution.Solver.Types.InstSolverPackage+ Distribution.Solver.Types.InstalledPreference+ Distribution.Solver.Types.LabeledPackageConstraint+ Distribution.Solver.Types.OptionalStanza+ Distribution.Solver.Types.PackageConstraint+ Distribution.Solver.Types.PackageFixedDeps+ Distribution.Solver.Types.PackageIndex+ Distribution.Solver.Types.PackagePath+ Distribution.Solver.Types.PackagePreferences+ Distribution.Solver.Types.PkgConfigDb+ Distribution.Solver.Types.Progress+ Distribution.Solver.Types.ResolverPackage+ Distribution.Solver.Types.Settings+ Distribution.Solver.Types.SolverId+ Distribution.Solver.Types.SolverPackage+ Distribution.Solver.Types.SourcePackage+ Distribution.Solver.Types.Variable+ Paths_cabal_install UnitTests.Distribution.Solver.Modular.DSL UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils UnitTests.Distribution.Solver.Modular.MemoryUsage@@ -544,8 +710,8 @@ random, hackage-security, tagged,- tasty,- tasty-hunit+ tasty >= 0.12,+ tasty-hunit >= 0.10 if flag(old-directory) build-depends: old-time@@ -588,6 +754,76 @@ hs-source-dirs: tests, . ghc-options: -Wall -fwarn-tabs -fno-ignore-asserts -main-is SolverQuickCheck other-modules:+ Distribution.Client.BuildReports.Types+ Distribution.Client.Compat.Prelude+ Distribution.Client.Dependency+ Distribution.Client.Dependency.Types+ Distribution.Client.FetchUtils+ Distribution.Client.GZipUtils+ Distribution.Client.GlobalFlags+ Distribution.Client.HttpUtils+ Distribution.Client.IndexUtils.Timestamp+ Distribution.Client.Init.Types+ Distribution.Client.PackageUtils+ Distribution.Client.Sandbox.Types+ Distribution.Client.Security.DNS+ Distribution.Client.Security.HTTP+ Distribution.Client.Setup+ Distribution.Client.SolverInstallPlan+ Distribution.Client.Tar+ Distribution.Client.Targets+ Distribution.Client.Types+ Distribution.Client.Utils+ Distribution.Client.Utils.Assertion+ Distribution.Client.World+ Distribution.Solver.Modular+ Distribution.Solver.Modular.Assignment+ Distribution.Solver.Modular.Builder+ Distribution.Solver.Modular.Configured+ Distribution.Solver.Modular.ConfiguredConversion+ Distribution.Solver.Modular.ConflictSet+ Distribution.Solver.Modular.Cycles+ Distribution.Solver.Modular.Dependency+ Distribution.Solver.Modular.Explore+ Distribution.Solver.Modular.Flag+ Distribution.Solver.Modular.Index+ Distribution.Solver.Modular.IndexConversion+ Distribution.Solver.Modular.LabeledGraph+ Distribution.Solver.Modular.Linking+ Distribution.Solver.Modular.Log+ Distribution.Solver.Modular.Message+ Distribution.Solver.Modular.PSQ+ Distribution.Solver.Modular.Package+ Distribution.Solver.Modular.Preference+ Distribution.Solver.Modular.RetryLog+ Distribution.Solver.Modular.Solver+ Distribution.Solver.Modular.Tree+ Distribution.Solver.Modular.Validate+ Distribution.Solver.Modular.Var+ Distribution.Solver.Modular.Version+ Distribution.Solver.Modular.WeightedPSQ+ Distribution.Solver.Types.ComponentDeps+ Distribution.Solver.Types.ConstraintSource+ Distribution.Solver.Types.DependencyResolver+ Distribution.Solver.Types.Flag+ Distribution.Solver.Types.InstSolverPackage+ Distribution.Solver.Types.InstalledPreference+ Distribution.Solver.Types.LabeledPackageConstraint+ Distribution.Solver.Types.OptionalStanza+ Distribution.Solver.Types.PackageConstraint+ Distribution.Solver.Types.PackageFixedDeps+ Distribution.Solver.Types.PackageIndex+ Distribution.Solver.Types.PackagePath+ Distribution.Solver.Types.PackagePreferences+ Distribution.Solver.Types.PkgConfigDb+ Distribution.Solver.Types.Progress+ Distribution.Solver.Types.ResolverPackage+ Distribution.Solver.Types.Settings+ Distribution.Solver.Types.SolverId+ Distribution.Solver.Types.SolverPackage+ Distribution.Solver.Types.SourcePackage+ Distribution.Solver.Types.Variable+ Paths_cabal_install UnitTests.Distribution.Solver.Modular.DSL UnitTests.Distribution.Solver.Modular.QuickCheck build-depends:@@ -612,7 +848,7 @@ binary, random, hackage-security,- tasty,+ tasty >= 0.12, tasty-quickcheck, QuickCheck >= 2.8.2, pretty-show@@ -656,7 +892,112 @@ main-is: IntegrationTests2.hs hs-source-dirs: tests, . ghc-options: -Wall -fwarn-tabs -fno-ignore-asserts -main-is IntegrationTests2- other-modules: Distribution.Client.Compat.FileLock+ other-modules:+ Distribution.Client.BuildReports.Types+ Distribution.Client.CmdBench+ Distribution.Client.CmdBuild+ Distribution.Client.CmdErrorMessages+ Distribution.Client.CmdHaddock+ Distribution.Client.CmdRepl+ Distribution.Client.CmdRun+ Distribution.Client.CmdTest+ Distribution.Client.Compat.ExecutablePath+ Distribution.Client.Compat.FileLock+ Distribution.Client.Compat.Prelude+ Distribution.Client.Compat.Semaphore+ Distribution.Client.Config+ Distribution.Client.Dependency+ Distribution.Client.Dependency.Types+ Distribution.Client.DistDirLayout+ Distribution.Client.FetchUtils+ Distribution.Client.FileMonitor+ Distribution.Client.GZipUtils+ Distribution.Client.Glob+ Distribution.Client.GlobalFlags+ Distribution.Client.HttpUtils+ Distribution.Client.IndexUtils+ Distribution.Client.IndexUtils.Timestamp+ Distribution.Client.Init.Types+ Distribution.Client.InstallPlan+ Distribution.Client.JobControl+ Distribution.Client.PackageHash+ Distribution.Client.PackageUtils+ Distribution.Client.ParseUtils+ Distribution.Client.ProjectBuilding+ Distribution.Client.ProjectBuilding.Types+ Distribution.Client.ProjectConfig+ Distribution.Client.ProjectConfig.Legacy+ Distribution.Client.ProjectConfig.Types+ Distribution.Client.ProjectOrchestration+ Distribution.Client.ProjectPlanOutput+ Distribution.Client.ProjectPlanning+ Distribution.Client.ProjectPlanning.Types+ Distribution.Client.RebuildMonad+ Distribution.Client.Sandbox.Types+ Distribution.Client.Security.DNS+ Distribution.Client.Security.HTTP+ Distribution.Client.Setup+ Distribution.Client.SetupWrapper+ Distribution.Client.SolverInstallPlan+ Distribution.Client.SourceFiles+ Distribution.Client.SrcDist+ Distribution.Client.Store+ Distribution.Client.Tar+ Distribution.Client.TargetSelector+ Distribution.Client.Targets+ Distribution.Client.Types+ Distribution.Client.Utils+ Distribution.Client.Utils.Assertion+ Distribution.Client.Utils.Json+ Distribution.Client.World+ Distribution.Solver.Modular+ Distribution.Solver.Modular.Assignment+ Distribution.Solver.Modular.Builder+ Distribution.Solver.Modular.Configured+ Distribution.Solver.Modular.ConfiguredConversion+ Distribution.Solver.Modular.ConflictSet+ Distribution.Solver.Modular.Cycles+ Distribution.Solver.Modular.Dependency+ Distribution.Solver.Modular.Explore+ Distribution.Solver.Modular.Flag+ Distribution.Solver.Modular.Index+ Distribution.Solver.Modular.IndexConversion+ Distribution.Solver.Modular.LabeledGraph+ Distribution.Solver.Modular.Linking+ Distribution.Solver.Modular.Log+ Distribution.Solver.Modular.Message+ Distribution.Solver.Modular.PSQ+ Distribution.Solver.Modular.Package+ Distribution.Solver.Modular.Preference+ Distribution.Solver.Modular.RetryLog+ Distribution.Solver.Modular.Solver+ Distribution.Solver.Modular.Tree+ Distribution.Solver.Modular.Validate+ Distribution.Solver.Modular.Var+ Distribution.Solver.Modular.Version+ Distribution.Solver.Modular.WeightedPSQ+ Distribution.Solver.Types.ComponentDeps+ Distribution.Solver.Types.ConstraintSource+ Distribution.Solver.Types.DependencyResolver+ Distribution.Solver.Types.Flag+ Distribution.Solver.Types.InstSolverPackage+ Distribution.Solver.Types.InstalledPreference+ Distribution.Solver.Types.LabeledPackageConstraint+ Distribution.Solver.Types.OptionalStanza+ Distribution.Solver.Types.PackageConstraint+ Distribution.Solver.Types.PackageFixedDeps+ Distribution.Solver.Types.PackageIndex+ Distribution.Solver.Types.PackagePath+ Distribution.Solver.Types.PackagePreferences+ Distribution.Solver.Types.PkgConfigDb+ Distribution.Solver.Types.Progress+ Distribution.Solver.Types.ResolverPackage+ Distribution.Solver.Types.Settings+ Distribution.Solver.Types.SolverId+ Distribution.Solver.Types.SolverPackage+ Distribution.Solver.Types.SourcePackage+ Distribution.Solver.Types.Variable+ Paths_cabal_install build-depends: async, array,@@ -684,8 +1025,8 @@ tar, time, zlib,- tasty,- tasty-hunit,+ tasty >= 0.12,+ tasty-hunit >= 0.10, tagged if flag(old-bytestring)
changelog view
@@ -1,6 +1,21 @@ -*-change-log-*- +2.0.0.1 Mikhail Glushenkov <mikhail.glushenkov@gmail.com> December 2017+ * Support for GHC's numeric -g debug levels (#4673).+ * Demoted 'scope' field version check to a warning (#4714).+ * Fixed verbosity flags getting removed before being passed to+ 'printPlan' (#4724).+ * Added a '--store-dir' option that can be used to configure the+ location of the build global build store (#4623).+ * Turned `allow-{newer,older}` in `cabal.project` files into an+ accumulating field to match CLI flag semantics (#4679).+ * Improve success message when `cabal upload`ing documentation+ (#4777).+ * Documentation fixes.+ 2.0.0.0 Mikhail Glushenkov <mikhail.glushenkov@gmail.com> August 2017+ * See http://coldwa.st/e/blog/2017-09-09-Cabal-2-0.html+ for more detailed release notes. * Removed the '--root-cmd' parameter of the 'install' command (#3356). * Deprecated 'cabal install --global' (#3356).@@ -24,7 +39,7 @@ '.../$pkgid.log' to '.../$compiler/$libname.log' (#3807). * Added a new command, 'cabal reconfigure', which re-runs 'configure' with the most recently used flags (#2214).- * Added add the '--index-state' flag for requesting a specific+ * Added the '--index-state' flag for requesting a specific version of the package index (#3893, #4115). * Support for building Backpack packages. See https://github.com/ezyang/ghc-proposals/blob/backpack/proposals/0000-backpack.rst@@ -32,7 +47,7 @@ * Support the Nix package manager (#3651). * Made the 'template-haskell' package non-upgradable again (#4185). * Fixed password echoing on MinTTY (#4128).- * Added a new solver flag, '--install-base-libraries', that allows+ * Added a new solver flag, '--allow-boot-library-installs', that allows any package to be installed or upgraded (#4209). * New 'cabal-install' command: 'outdated', for listing outdated version bounds in a .cabal file or a freeze file (#4207).@@ -47,6 +62,29 @@ * Added a technical preview version of the 'cabal doctest' command (#4480). +1.24.0.2 Mikhail Glushenkov <mikhail.glushenkov@gmail.com> December 2016+ * Adapted to the revert of a PVP-noncompliant API change in+ Cabal 1.24.2.0 (#4123).+ * Bumped the directory upper bound to < 1.4 (#4158).++1.24.0.1 Ryan Thomas <ryan@ryant.org> October 2016+ * Fixed issue with passing '--enable-profiling' when invoking+ Setup scripts built with older versions of Cabal (#3873).+ * Fixed various behaviour differences between network transports+ (#3429).+ * Updated to depend on the latest hackage-security that fixes+ various issues on Windows.+ * Fixed 'new-build' to exit with a non-zero exit code on failure+ (#3506).+ * Store secure repo index data as 01-index.* (#3862).+ * Added new hackage-security root keys for distribution with+ cabal-install.+ * Fix an issue where 'cabal install' sometimes had to be run twice+ for packages with build-type: Custom and a custom-setup stanza+ (#3723).+ * 'cabal sdist' no longer ignores '--builddir' when the package's+ build-type is Custom (#3794).+ 1.24.0.0 Ryan Thomas <ryan@ryant.org> March 2016 * If there are multiple remote repos, 'cabal update' now updates them in parallel (#2503).@@ -107,6 +145,39 @@ * Tech preview of new nix-style isolated project-based builds. Currently provides the commands (new-)build/repl/configure. +1.22.9.0 Ryan Thomas <ryan@ryant.org> March 2016+ * Include Cabal-1.22.8.0++1.22.8.0 Ryan Thomas <ryan@ryant.org> February 2016+ * Only Custom setup scripts should be compiled with '-i -i.'.+ * installedCabalVersion: Don't special-case Cabal anymore.+ * Bump the HTTP upper bound. See #3069.++1.22.7.0 Ryan Thomas <ryan@ryant.org> December 2015+ * Remove GZipUtils tests+ * maybeDecompress: bail on all errors at the beginning of the stream with zlib < 0.6+ * Correct maybeDecompress++1.22.6.0 Ryan Thomas <ryan@ryant.org> June 2015+ * A fix for @ezyang's fix for #2502. (Mikhail Glushenkov)++1.22.5.0 Ryan Thomas <ryan@ryant.org> June 2015+ * Reduce temporary directory name length, fixes #2502. (Edward Z. Yang)++1.22.4.0 Ryan Thomas <ryan@ryant.org> May 2015+ * Force cabal upload to always use digest auth and never basic auth.+ * Add dependency-graph information to `printPlan` output+ * bootstrap.sh: fixes linker matching to avoid cases where tested linker names appear unexpectedly in compiler output (fixes #2542)++1.22.3.0 Ryan Thomas <ryan@ryant.org> April 2015+ * Fix bash completion for sandbox subcommands - Fixes #2513 (Mikhail Glushenkov)+ * filterConfigureFlags: filter more flags (Mikhail Glushenkov)++1.22.2.0 Ryan Thomas <ryan@ryant.org> March 2015+ * Don't pass '--{en,dis}able-profiling' to old setup exes.+ * -Wall police+ * Allow filepath 1.4+ 1.22.0.0 Johan Tibell <johan.tibell@gmail.com> January 2015 * New command: user-config (#2159). * Implement 'cabal repl --only' (#2016).@@ -121,6 +192,19 @@ * Install profiling and shared libs by default in 'bootstrap.sh' (#2009). +1.20.2.0 Ryan Thomas <ryan@ryant.org> February 2016+ * Only Custom setup scripts should be compiled with '-i -i.'.+ * installedCabalVersion: Don't special-case Cabal anymore.++1.20.1.0 Ryan Thomas <ryan@ryant.org> May 2015+ * Force cabal upload to always use digest auth and never basic auth.+ * bootstrap.sh: install network-uri before HTTP++1.20.0.5 Johan Tibell <johan.tibell@gmail.com> December 2014+ * Support random 1.1.+ * Fix bootstrap script after network package split.+ * Support network-2.6 in test suite.+ 1.20.0.3 Johan Tibell <johan.tibell@gmail.com> June 2014 * Don't attempt to rename dist if it is already named correctly * Treat all flags of a package as interdependent.@@ -148,6 +232,28 @@ * Add experimental Cabal file format command * Add haddock section to config file * Add --main-is flag to init++1.18.2.0 Ryan Thomas <ryan@ryant.org> February 2016+ * Only Custom setup scripts should be compiled with '-i -i.'.+ * installedCabalVersion: Don't special-case Cabal anymore.++1.18.1.0 Ryan Thomas <ryan@ryant.org> May 2015+ * Force cabal upload to always use digest auth and never basic auth.+ * Merge pull request #2367 from juhp/patch-2+ * Fix bootstrap.sh by bumping HTTP to 4000.2.16.1++1.18.0.7 Johan Tibell <johan.tibell@gmail.com> December 2014+ * Support random 1.1.+ * Fix bootstrap script after network package split.+ * Support network-2.6 in test suite.++1.18.0.5 Johan Tibell <johan.tibell@gmail.com> July 2014+ * Make solver flag resolution more conservative.++1.18.0.4 Johan Tibell <johan.tibell@gmail.com> May 2014+ * Increase max-backjumps to 2000.+ * Fix solver bug which led to missed install plans.+ * Tweak solver heuristics to avoid reinstalls. 0.14.0 Andres Loeh <andres@well-typed.com> April 2012 * Works with ghc-7.4
tests/IntegrationTests2.hs view
@@ -1634,7 +1634,7 @@ res <- try action case res of Left e -> return e- Right _ -> throwIO $ HUnitFailure $ "expected an exception " ++ expected+ Right _ -> throwIO $ HUnitFailure Nothing $ "expected an exception " ++ expected expectPackagePreExisting :: ElaboratedInstallPlan -> BuildOutcomes -> PackageId -> IO InstalledPackageInfo@@ -1675,7 +1675,7 @@ unexpectedBuildResult :: String -> ElaboratedPlanPackage -> Maybe (Either BuildFailure BuildResult) -> IO a unexpectedBuildResult expected planpkg buildResult =- throwIO $ HUnitFailure $+ throwIO $ HUnitFailure Nothing $ "expected to find " ++ display (packageId planpkg) ++ " in the " ++ expected ++ " state, but it is actually in the " ++ actual ++ " state." where@@ -1693,10 +1693,10 @@ | pkg <- InstallPlan.toList plan , packageId pkg == pkgid ] of [pkg] -> return pkg- [] -> throwIO $ HUnitFailure $+ [] -> throwIO $ HUnitFailure Nothing $ "expected to find " ++ display pkgid ++ " in the install plan but it's not there"- _ -> throwIO $ HUnitFailure $+ _ -> throwIO $ HUnitFailure Nothing $ "expected to find only one instance of " ++ display pkgid ++ " in the install plan but there's several"
tests/UnitTests/Distribution/Client/FileMonitor.hs view
@@ -818,7 +818,7 @@ res <- checkChanged root monitor key case res of MonitorChanged reason -> return reason- MonitorUnchanged _ _ -> throwIO $ HUnitFailure "expected change"+ MonitorUnchanged _ _ -> throwIO $ HUnitFailure Nothing "expected change" expectMonitorUnchanged :: (Binary a, Binary b) => RootPath -> FileMonitor a b -> a@@ -826,7 +826,7 @@ expectMonitorUnchanged root monitor key = do res <- checkChanged root monitor key case res of- MonitorChanged _reason -> throwIO $ HUnitFailure "expected no change"+ MonitorChanged _reason -> throwIO $ HUnitFailure Nothing "expected no change" MonitorUnchanged b files -> return (b, files) checkChanged :: (Binary a, Binary b)
tests/UnitTests/Distribution/Client/Glob.hs view
@@ -103,12 +103,12 @@ testparse s = case simpleParse s of Just p -> return p- Nothing -> throwIO $ HUnitFailure ("expected parse of: " ++ s)+ Nothing -> throwIO $ HUnitFailure Nothing ("expected parse of: " ++ s) parseFail :: String -> Assertion parseFail s = case simpleParse s :: Maybe FilePathGlob of- Just _ -> throwIO $ HUnitFailure ("expected no parse of: " ++ s)+ Just _ -> throwIO $ HUnitFailure Nothing ("expected no parse of: " ++ s) Nothing -> return () instance Arbitrary FilePathGlob where
tests/UnitTests/Distribution/Client/ProjectConfig.hs view
@@ -313,18 +313,46 @@ <*> arbitrary <*> (fmap getShortToken <$> arbitrary) <*> (fmap getShortToken <$> arbitrary)+ <*> (fmap getShortToken <$> arbitrary) where arbitraryNumJobs = fmap (fmap getPositive) <$> arbitrary - shrink (ProjectConfigBuildOnly- x00 x01 x02 x03 x04 x05 x06 x07- x08 x09 x10 x11 x12 x13 x14 x15- x16) =- [ ProjectConfigBuildOnly- x00' x01' x02' x03' x04'- x05' x06' x07' x08' (postShrink_NumJobs x09')- x10' x11' x12' x13 x14'- x15 x16+ shrink ProjectConfigBuildOnly { projectConfigVerbosity = x00+ , projectConfigDryRun = x01+ , projectConfigOnlyDeps = x02+ , projectConfigSummaryFile = x03+ , projectConfigLogFile = x04+ , projectConfigBuildReports = x05+ , projectConfigReportPlanningFailure = x06+ , projectConfigSymlinkBinDir = x07+ , projectConfigOneShot = x08+ , projectConfigNumJobs = x09+ , projectConfigKeepGoing = x10+ , projectConfigOfflineMode = x11+ , projectConfigKeepTempFiles = x12+ , projectConfigHttpTransport = x13+ , projectConfigIgnoreExpiry = x14+ , projectConfigCacheDir = x15+ , projectConfigLogsDir = x16+ , projectConfigStoreDir = x17 } =+ [ ProjectConfigBuildOnly { projectConfigVerbosity = x00'+ , projectConfigDryRun = x01'+ , projectConfigOnlyDeps = x02'+ , projectConfigSummaryFile = x03'+ , projectConfigLogFile = x04'+ , projectConfigBuildReports = x05'+ , projectConfigReportPlanningFailure = x06'+ , projectConfigSymlinkBinDir = x07'+ , projectConfigOneShot = x08'+ , projectConfigNumJobs = postShrink_NumJobs x09'+ , projectConfigKeepGoing = x10'+ , projectConfigOfflineMode = x11'+ , projectConfigKeepTempFiles = x12'+ , projectConfigHttpTransport = x13+ , projectConfigIgnoreExpiry = x14'+ , projectConfigCacheDir = x15+ , projectConfigLogsDir = x16+ , projectConfigStoreDir = x17} | ((x00', x01', x02', x03', x04'), (x05', x06', x07', x08', x09'), (x10', x11', x12', x14'))