diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index f864dd237f5..5ae47f72cc4 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -194,7 +194,6 @@ library Distribution.Client.VCS Distribution.Client.Version Distribution.Client.Win32SelfUpgrade - Distribution.Client.World build-depends: async >= 2.0 && < 2.3, diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index efca42d953c..17eb0c0550f 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -243,7 +243,6 @@ instance Semigroup SavedConfig where globalLocalNoIndexRepos = lastNonEmptyNL globalLocalNoIndexRepos, globalActiveRepos = combine globalActiveRepos, globalLogsDir = combine globalLogsDir, - globalWorldFile = combine globalWorldFile, globalIgnoreExpiry = combine globalIgnoreExpiry, globalHttpTransport = combine globalHttpTransport, globalNix = combine globalNix, @@ -321,7 +320,6 @@ instance Semigroup SavedConfig where installReportPlanningFailure = combine installReportPlanningFailure, installSymlinkBinDir = combine installSymlinkBinDir, installPerComponent = combine installPerComponent, - installOneShot = combine installOneShot, installNumJobs = combine installNumJobs, installKeepGoing = combine installKeepGoing, installRunTests = combine installRunTests, @@ -540,7 +538,6 @@ baseSavedConfig = do userPrefix <- getCabalDir cacheDir <- defaultCacheDir logsDir <- defaultLogsDir - worldFile <- defaultWorldFile return mempty { savedConfigureFlags = mempty { configHcFlavor = toFlag defaultCompiler, @@ -552,8 +549,7 @@ baseSavedConfig = do }, savedGlobalFlags = mempty { globalCacheDir = toFlag cacheDir, - globalLogsDir = toFlag logsDir, - globalWorldFile = toFlag worldFile + globalLogsDir = toFlag logsDir } } @@ -567,14 +563,12 @@ initialSavedConfig :: IO SavedConfig initialSavedConfig = do cacheDir <- defaultCacheDir logsDir <- defaultLogsDir - worldFile <- defaultWorldFile extraPath <- defaultExtraPath installPath <- defaultInstallPath return mempty { savedGlobalFlags = mempty { globalCacheDir = toFlag cacheDir, - globalRemoteRepos = toNubList [defaultRemoteRepo], - globalWorldFile = toFlag worldFile + globalRemoteRepos = toNubList [defaultRemoteRepo] }, savedConfigureFlags = mempty { configProgramPathExtra = toNubList extraPath @@ -614,12 +608,6 @@ defaultLogsDir = do dir <- getCabalDir return $ dir "logs" --- | Default position of the world file -defaultWorldFile :: IO FilePath -defaultWorldFile = do - dir <- getCabalDir - return $ dir "world" - defaultExtraPath :: IO [FilePath] defaultExtraPath = do dir <- getCabalDir diff --git a/cabal-install/src/Distribution/Client/DistDirLayout.hs b/cabal-install/src/Distribution/Client/DistDirLayout.hs index a4ca5194c56..d8923370797 100644 --- a/cabal-install/src/Distribution/Client/DistDirLayout.hs +++ b/cabal-install/src/Distribution/Client/DistDirLayout.hs @@ -147,8 +147,7 @@ data StoreDirLayout = StoreDirLayout { data CabalDirLayout = CabalDirLayout { cabalStoreDirLayout :: StoreDirLayout, - cabalLogsDirectory :: FilePath, - cabalWorldFile :: FilePath + cabalLogsDirectory :: FilePath } @@ -309,5 +308,3 @@ mkCabalDirLayout cabalDir mstoreDir mlogDir = defaultStoreDirLayout (fromMaybe (cabalDir "store") mstoreDir) cabalLogsDirectory :: FilePath cabalLogsDirectory = fromMaybe (cabalDir "logs") mlogDir - cabalWorldFile :: FilePath - cabalWorldFile = cabalDir "world" diff --git a/cabal-install/src/Distribution/Client/Fetch.hs b/cabal-install/src/Distribution/Client/Fetch.hs index 8e9496c8dc6..1f6c196c149 100644 --- a/cabal-install/src/Distribution/Client/Fetch.hs +++ b/cabal-install/src/Distribution/Client/Fetch.hs @@ -78,7 +78,7 @@ fetch verbosity _ _ _ _ _ _ _ [] = notice verbosity "No packages requested. Nothing to do." fetch verbosity packageDBs repoCtxt comp platform progdb - globalFlags fetchFlags userTargets = do + _ fetchFlags userTargets = do traverse_ (checkTarget verbosity) userTargets @@ -87,7 +87,6 @@ fetch verbosity packageDBs repoCtxt comp platform progdb pkgConfigDb <- readPkgConfigDb verbosity progdb pkgSpecifiers <- resolveUserTargets verbosity repoCtxt - (fromFlag $ globalWorldFile globalFlags) (packageIndex sourcePkgDb) userTargets diff --git a/cabal-install/src/Distribution/Client/Freeze.hs b/cabal-install/src/Distribution/Client/Freeze.hs index 4b4ea1f31df..ff9f6fde91a 100644 --- a/cabal-install/src/Distribution/Client/Freeze.hs +++ b/cabal-install/src/Distribution/Client/Freeze.hs @@ -105,14 +105,13 @@ getFreezePkgs :: Verbosity -> FreezeFlags -> IO [SolverPlanPackage] getFreezePkgs verbosity packageDBs repoCtxt comp platform progdb - globalFlags freezeFlags = do + _ freezeFlags = do installedPkgIndex <- getInstalledPackages verbosity comp packageDBs progdb sourcePkgDb <- getSourcePackages verbosity repoCtxt pkgConfigDb <- readPkgConfigDb verbosity progdb pkgSpecifiers <- resolveUserTargets verbosity repoCtxt - (fromFlag $ globalWorldFile globalFlags) (packageIndex sourcePkgDb) [UserTargetLocalDir "."] diff --git a/cabal-install/src/Distribution/Client/Get.hs b/cabal-install/src/Distribution/Client/Get.hs index 220448465d6..d2e08b3ef46 100644 --- a/cabal-install/src/Distribution/Client/Get.hs +++ b/cabal-install/src/Distribution/Client/Get.hs @@ -67,7 +67,7 @@ get :: Verbosity get verbosity _ _ _ [] = notice verbosity "No packages requested. Nothing to do." -get verbosity repoCtxt globalFlags getFlags userTargets = do +get verbosity repoCtxt _ getFlags userTargets = do let useSourceRepo = case getSourceRepository getFlags of NoFlag -> False _ -> True @@ -84,7 +84,6 @@ get verbosity repoCtxt globalFlags getFlags userTargets = do (sourcePkgDb, _, _) <- getSourcePackagesAtIndexState verbosity repoCtxt idxState activeRepos pkgSpecifiers <- resolveUserTargets verbosity repoCtxt - (fromFlag $ globalWorldFile globalFlags) (packageIndex sourcePkgDb) userTargets diff --git a/cabal-install/src/Distribution/Client/GlobalFlags.hs b/cabal-install/src/Distribution/Client/GlobalFlags.hs index d44e3eb9733..e6330d79fc2 100644 --- a/cabal-install/src/Distribution/Client/GlobalFlags.hs +++ b/cabal-install/src/Distribution/Client/GlobalFlags.hs @@ -65,7 +65,6 @@ data GlobalFlags = GlobalFlags , globalLocalNoIndexRepos :: NubList LocalRepo , globalActiveRepos :: Flag ActiveRepos , globalLogsDir :: Flag FilePath - , globalWorldFile :: Flag FilePath , globalIgnoreExpiry :: Flag Bool -- ^ Ignore security expiry dates , globalHttpTransport :: Flag String , globalNix :: Flag Bool -- ^ Integrate with Nix @@ -84,7 +83,6 @@ defaultGlobalFlags = GlobalFlags , globalLocalNoIndexRepos = mempty , globalActiveRepos = mempty , globalLogsDir = mempty - , globalWorldFile = mempty , globalIgnoreExpiry = Flag False , globalHttpTransport = mempty , globalNix = Flag False diff --git a/cabal-install/src/Distribution/Client/Install.hs b/cabal-install/src/Distribution/Client/Install.hs index 9a2003ccae8..d099ec4dfff 100644 --- a/cabal-install/src/Distribution/Client/Install.hs +++ b/cabal-install/src/Distribution/Client/Install.hs @@ -86,7 +86,6 @@ import qualified Distribution.Client.InstallSymlink as InstallSymlink ( 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 import Distribution.Client.JobControl @@ -129,8 +128,6 @@ import Distribution.Package ( PackageIdentifier(..), PackageId, packageName, packageVersion , Package(..), HasMungedPackageId(..), HasUnitId(..) , UnitId ) -import Distribution.Types.Dependency - ( Dependency (..), mainLibSet ) import Distribution.Types.GivenComponent ( GivenComponent(..) ) import Distribution.Types.PackageVersionConstraint @@ -165,11 +162,9 @@ import qualified Data.ByteString as BS -- * complain about flags that do not apply to any package given as target -- so flags do not apply to dependencies, only listed, can use flag -- constraints for dependencies --- * only record applicable flags in world file -- * allow flag constraints -- * allow installed constraints -- * allow flag and installed preferences --- * change world file to use cabal section syntax -- * allow persistent configure flags for each package individually -- ------------------------------------------------------------ @@ -257,7 +252,7 @@ makeInstallContext :: Verbosity -> InstallArgs -> Maybe [UserTarget] -> IO InstallContext makeInstallContext verbosity (packageDBs, repoCtxt, comp, _, progdb, - globalFlags, _, configExFlags, installFlags, _, _, _) mUserTargets = do + _, _, configExFlags, installFlags, _, _, _) mUserTargets = do let idxState = flagToMaybe (installIndexState installFlags) @@ -282,7 +277,6 @@ makeInstallContext verbosity | otherwise = userTargets0 pkgSpecifiers <- resolveUserTargets verbosity repoCtxt - (fromFlag $ globalWorldFile globalFlags) (packageIndex sourcePkgDb) userTargets return (userTargets, pkgSpecifiers) @@ -798,7 +792,6 @@ theSpecifiedPackage pkgSpec = -- * build reporting, local and remote -- * symlinking binaries -- * updating indexes --- * updating world file -- * error reporting -- postInstallActions :: Verbosity @@ -810,13 +803,7 @@ postInstallActions :: Verbosity postInstallActions verbosity (packageDBs, _, comp, platform, progdb ,globalFlags, configFlags, _, installFlags, _, _, _) - targets installPlan buildOutcomes = do - - unless oneShot $ - World.insert verbosity worldFile - --FIXME: does not handle flags - [ World.WorldPkgInfo (Dependency pn vr mainLibSet) mempty - | UserTargetNamed (PackageVersionConstraint pn vr) <- targets ] + _ installPlan buildOutcomes = do let buildReports = BuildReports.fromInstallPlan platform (compilerId comp) installPlan buildOutcomes @@ -840,8 +827,6 @@ postInstallActions verbosity where reportingLevel = fromFlag (installBuildReports installFlags) logsDir = fromFlag (globalLogsDir globalFlags) - oneShot = fromFlag (installOneShot installFlags) - worldFile = fromFlag $ globalWorldFile globalFlags storeDetailedBuildReports :: Verbosity -> FilePath -> [(BuildReports.BuildReport, Maybe Repo)] -> IO () diff --git a/cabal-install/src/Distribution/Client/List.hs b/cabal-install/src/Distribution/Client/List.hs index d52b309a7f3..a8bede49dd7 100644 --- a/cabal-install/src/Distribution/Client/List.hs +++ b/cabal-install/src/Distribution/Client/List.hs @@ -192,7 +192,7 @@ info verbosity _ _ _ _ _ _ [] = notice verbosity "No packages requested. Nothing to do." info verbosity packageDBs repoCtxt comp progdb - globalFlags _listFlags userTargets = do + _ _listFlags userTargets = do installedPkgIndex <- getInstalledPackages verbosity comp packageDBs progdb sourcePkgDb <- getSourcePackages verbosity repoCtxt @@ -209,7 +209,6 @@ info verbosity packageDBs repoCtxt comp progdb ++ map packageId (PackageIndex.allPackages sourcePkgIndex) pkgSpecifiers <- resolveUserTargets verbosity repoCtxt - (fromFlag $ globalWorldFile globalFlags) sourcePkgs' userTargets pkgsinfo <- sequenceA diff --git a/cabal-install/src/Distribution/Client/Manpage.hs b/cabal-install/src/Distribution/Client/Manpage.hs index 60786bfeafd..2c2f38672fd 100644 --- a/cabal-install/src/Distribution/Client/Manpage.hs +++ b/cabal-install/src/Distribution/Client/Manpage.hs @@ -42,7 +42,6 @@ data FileInfo = FileInfo String String -- ^ path, description files :: [FileInfo] files = [ (FileInfo "~/.cabal/config" "The defaults that can be overridden with command-line options.") - , (FileInfo "~/.cabal/world" "A list of all packages whose installation has been explicitly requested.") ] manpageCmd :: String -> [CommandSpec a] -> ManpageFlags -> IO () diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index 6da708d651e..766f35e50ae 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -311,7 +311,6 @@ resolveBuildTimeSettings verbosity --buildSettingLogVerbosity -- defined below, more complicated buildSettingBuildReports = fromFlag projectConfigBuildReports buildSettingSymlinkBinDir = flagToList projectConfigSymlinkBinDir - buildSettingOneShot = fromFlag projectConfigOneShot buildSettingNumJobs = determineNumJobs projectConfigNumJobs buildSettingKeepGoing = fromFlag projectConfigKeepGoing buildSettingOfflineMode = fromFlag projectConfigOfflineMode @@ -336,7 +335,6 @@ resolveBuildTimeSettings verbosity projectConfigBuildReports = toFlag NoReports, projectConfigReportPlanningFailure = toFlag False, projectConfigKeepGoing = toFlag False, - projectConfigOneShot = toFlag False, projectConfigOfflineMode = toFlag False, projectConfigKeepTempFiles = toFlag False, projectConfigIgnoreExpiry = toFlag False diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs index 38852d0fd00..410d9531cea 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs @@ -500,7 +500,6 @@ convertLegacyBuildOnlyFlags globalFlags configFlags GlobalFlags { globalCacheDir = projectConfigCacheDir, globalLogsDir = projectConfigLogsDir, - globalWorldFile = _, globalHttpTransport = projectConfigHttpTransport, globalIgnoreExpiry = projectConfigIgnoreExpiry } = globalFlags @@ -520,7 +519,6 @@ convertLegacyBuildOnlyFlags globalFlags configFlags installBuildReports = projectConfigBuildReports, installReportPlanningFailure = projectConfigReportPlanningFailure, installSymlinkBinDir = projectConfigSymlinkBinDir, - installOneShot = projectConfigOneShot, installNumJobs = projectConfigNumJobs, installKeepGoing = projectConfigKeepGoing, installOfflineMode = projectConfigOfflineMode @@ -586,7 +584,6 @@ convertToLegacySharedConfig globalLocalNoIndexRepos = projectConfigLocalNoIndexRepos, globalActiveRepos = projectConfigActiveRepos, globalLogsDir = projectConfigLogsDir, - globalWorldFile = mempty, globalIgnoreExpiry = projectConfigIgnoreExpiry, globalHttpTransport = projectConfigHttpTransport, globalNix = mempty, @@ -642,7 +639,6 @@ convertToLegacySharedConfig installReportPlanningFailure = projectConfigReportPlanningFailure, installSymlinkBinDir = projectConfigSymlinkBinDir, installPerComponent = projectConfigPerComponent, - installOneShot = projectConfigOneShot, installNumJobs = projectConfigNumJobs, installKeepGoing = projectConfigKeepGoing, installRunTests = mempty, @@ -1027,7 +1023,7 @@ legacySharedConfigFieldDescrs constraintSrc = concat , "root-cmd", "symlink-bindir" , "build-log" , "remote-build-reporting", "report-planning-failure" - , "one-shot", "jobs", "keep-going", "offline", "per-component" + , "jobs", "keep-going", "offline", "per-component" -- solver flags: , "max-backjumps", "reorder-goals", "count-conflicts" , "fine-grained-conflicts" , "minimize-conflict-set", "independent-goals" diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs index eb32ce27410..84996b2a0cf 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs @@ -142,7 +142,6 @@ data ProjectConfigBuildOnly projectConfigBuildReports :: Flag ReportLevel, projectConfigReportPlanningFailure :: Flag Bool, projectConfigSymlinkBinDir :: Flag FilePath, - projectConfigOneShot :: Flag Bool, projectConfigNumJobs :: Flag (Maybe Int), projectConfigKeepGoing :: Flag Bool, projectConfigOfflineMode :: Flag Bool, @@ -448,7 +447,6 @@ data BuildTimeSettings buildSettingBuildReports :: ReportLevel, buildSettingReportPlanningFailure :: Bool, buildSettingSymlinkBinDir :: [FilePath], - buildSettingOneShot :: Bool, buildSettingNumJobs :: Int, buildSettingKeepGoing :: Bool, buildSettingOfflineMode :: Bool, diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install/src/Distribution/Client/Setup.hs index 4b85c88278e..279ae9eba12 100644 --- a/cabal-install/src/Distribution/Client/Setup.hs +++ b/cabal-install/src/Distribution/Client/Setup.hs @@ -378,7 +378,6 @@ globalCommand commands = CommandUI { -- arguments we don't want shown in the help -- the remote repo flags are not useful compared to the more general "active-repositories" flag. -- the global logs directory was only used in v1, while in v2 we have specific project config logs dirs - -- the world-file flag is long deprecated and unused -- default-user-config is support for a relatively obscure workflow for v1-freeze. argsNotShown :: [OptionField GlobalFlags] argsNotShown = [ @@ -407,11 +406,6 @@ globalCommand commands = CommandUI { globalConstraintsFile (\v flags -> flags {globalConstraintsFile = v}) (reqArgFlag "FILE") - ,option [] ["world-file"] - "The location of the world file" - globalWorldFile (\v flags -> flags { globalWorldFile = v }) - (reqArgFlag "FILE") - ] -- ------------------------------------------------------------ @@ -1573,7 +1567,6 @@ data InstallFlags = InstallFlags { -- when removing v1 commands installSymlinkBinDir :: Flag FilePath, installPerComponent :: Flag Bool, - installOneShot :: Flag Bool, installNumJobs :: Flag (Maybe Int), installKeepGoing :: Flag Bool, installRunTests :: Flag Bool, @@ -1614,7 +1607,6 @@ defaultInstallFlags = InstallFlags { installReportPlanningFailure = Flag False, installSymlinkBinDir = mempty, installPerComponent = Flag True, - installOneShot = Flag False, installNumJobs = mempty, installKeepGoing = Flag False, installRunTests = mempty, @@ -1909,11 +1901,6 @@ installOptions showOrParseArgs = installPerComponent (\v flags -> flags { installPerComponent = v }) (boolOpt [] []) - , option [] ["one-shot"] - "Do not record the packages in the world file." - installOneShot (\v flags -> flags { installOneShot = v }) - (yesNoOpt showOrParseArgs) - , option [] ["run-tests"] "Run package test suites during installation." installRunTests (\v flags -> flags { installRunTests = v }) diff --git a/cabal-install/src/Distribution/Client/Targets.hs b/cabal-install/src/Distribution/Client/Targets.hs index 1e16d2765c8..b189bd8a753 100644 --- a/cabal-install/src/Distribution/Client/Targets.hs +++ b/cabal-install/src/Distribution/Client/Targets.hs @@ -53,7 +53,6 @@ import Distribution.Client.Compat.Prelude import Distribution.Package ( Package(..), PackageName, unPackageName, mkPackageName , packageName ) -import Distribution.Types.Dependency import Distribution.Client.Types ( PackageLocation(..), ResolvedPkgLoc, UnresolvedSourcePackage , PackageSpecifier(..) ) @@ -65,7 +64,6 @@ import Distribution.Solver.Types.PackageIndex (PackageIndex) import qualified Distribution.Solver.Types.PackageIndex as PackageIndex import Distribution.Solver.Types.SourcePackage -import qualified Distribution.Client.World as World import qualified Codec.Archive.Tar as Tar import qualified Codec.Archive.Tar.Entry as Tar import qualified Distribution.Client.Tar as Tar @@ -79,11 +77,11 @@ import Distribution.Types.PackageVersionConstraint import Distribution.PackageDescription ( GenericPackageDescription ) import Distribution.Types.Flag - ( nullFlagAssignment, parsecFlagAssignmentNonEmpty ) + ( parsecFlagAssignmentNonEmpty ) import Distribution.Version - ( anyVersion, isAnyVersion ) + ( isAnyVersion ) import Distribution.Simple.Utils - ( die', warn, lowercase ) + ( die', lowercase ) import Distribution.PackageDescription.Parsec ( readGenericPackageDescription, parseGenericPackageDescriptionMaybe ) @@ -116,13 +114,6 @@ data UserTarget = -- UserTargetNamed PackageVersionConstraint - -- | A special virtual package that refers to the collection of packages - -- recorded in the world file that the user specifically installed. - -- - -- > cabal install world - -- - | UserTargetWorld - -- | A specific package that is unpacked in a local directory, often the -- current directory. -- @@ -174,17 +165,11 @@ data UserTargetProblem | UserTargetUnexpectedUriScheme String | UserTargetUnrecognisedUri String | UserTargetUnrecognised String - | UserTargetBadWorldPkg deriving Show readUserTarget :: String -> IO (Either UserTargetProblem UserTarget) readUserTarget targetstr = case eitherParsec targetstr of - Right (PackageVersionConstraint pkgn verrange) - | pkgn == mkPackageName "world" - -> return $ if verrange == anyVersion - then Right UserTargetWorld - else Left UserTargetBadWorldPkg Right dep -> return (Right (UserTargetNamed dep)) Left _err -> do fileTarget <- testFileTargets targetstr @@ -254,14 +239,9 @@ reportUserTargetProblems verbosity problems = do | name <- target ] ++ "Targets can be:\n" ++ " - package names, e.g. 'pkgname', 'pkgname-1.0.1', 'pkgname < 2.0'\n" - ++ " - the special 'world' target\n" ++ " - cabal files 'pkgname.cabal' or package directories 'pkgname/'\n" ++ " - package tarballs 'pkgname.tar.gz' or 'http://example.com/pkgname.tar.gz'" - case [ () | UserTargetBadWorldPkg <- problems ] of - [] -> return () - _ -> die' verbosity "The special 'world' target does not take any version." - case [ target | UserTargetNonexistantFile target <- problems ] of [] -> return () target -> die' verbosity @@ -305,17 +285,16 @@ reportUserTargetProblems verbosity problems = do resolveUserTargets :: Package pkg => Verbosity -> RepoContext - -> FilePath -> PackageIndex pkg -> [UserTarget] -> IO [PackageSpecifier UnresolvedSourcePackage] -resolveUserTargets verbosity repoCtxt worldFile available userTargets = do +resolveUserTargets verbosity repoCtxt available userTargets = do -- given the user targets, get a list of fully or partially resolved -- package references packageTargets <- traverse (readPackageTarget verbosity) =<< traverse (fetchPackageTarget verbosity repoCtxt) . concat - =<< traverse (expandUserTarget verbosity worldFile) userTargets + =<< traverse (expandUserTarget verbosity) userTargets -- users are allowed to give package names case-insensitively, so we must -- disambiguate named package references @@ -357,26 +336,15 @@ data PackageTarget pkg = -- (each of which refers to only one package). -- expandUserTarget :: Verbosity - -> FilePath -> UserTarget -> IO [PackageTarget (PackageLocation ())] -expandUserTarget verbosity worldFile userTarget = case userTarget of +expandUserTarget verbosity userTarget = case userTarget of UserTargetNamed (PackageVersionConstraint name vrange) -> let props = [ PackagePropertyVersion vrange | not (isAnyVersion vrange) ] in return [PackageTargetNamedFuzzy name props userTarget] - UserTargetWorld -> do - worldPkgs <- World.getContents verbosity worldFile - --TODO: should we warn if there are no world targets? - return [ PackageTargetNamed name props userTarget - | World.WorldPkgInfo (Dependency name vrange _) flags <- worldPkgs - , let props = [ PackagePropertyVersion vrange - | not (isAnyVersion vrange) ] - ++ [ PackagePropertyFlags flags - | not (nullFlagAssignment flags) ] ] - UserTargetLocalDir dir -> return [ PackageTargetLocation (LocalUnpackedPackage dir) ] @@ -554,8 +522,7 @@ disambiguatePackageTargets availablePkgIndex availableExtra targets = reportPackageTargetProblems :: Verbosity -> [PackageTargetProblem] -> IO () reportPackageTargetProblems verbosity problems = do - case [ pkg | PackageNameUnknown pkg originalTarget <- problems - , not (isUserTagetWorld originalTarget) ] of + case [ pkg | PackageNameUnknown pkg _ <- problems ] of [] -> return () pkgs -> die' verbosity $ unlines [ "There is no package named '" ++ prettyShow name ++ "'. " @@ -574,16 +541,6 @@ reportPackageTargetProblems verbosity problems = do ++ "." | (name, matches) <- ambiguities ] - case [ pkg | PackageNameUnknown pkg UserTargetWorld <- problems ] of - [] -> return () - pkgs -> warn verbosity $ - "The following 'world' packages will be ignored because " - ++ "they refer to packages that cannot be found: " - ++ intercalate ", " (map prettyShow pkgs) ++ "\n" - ++ "You can suppress this warning by correcting the world file." - where - isUserTagetWorld UserTargetWorld = True; isUserTagetWorld _ = False - -- ------------------------------------------------------------ -- * Disambiguating package names diff --git a/cabal-install/src/Distribution/Client/World.hs b/cabal-install/src/Distribution/Client/World.hs deleted file mode 100644 index 49d530fabfb..00000000000 --- a/cabal-install/src/Distribution/Client/World.hs +++ /dev/null @@ -1,146 +0,0 @@ -{-# LANGUAGE DeriveGeneric #-} ------------------------------------------------------------------------------ --- | --- Module : Distribution.Client.World --- Copyright : (c) Peter Robinson 2009 --- License : BSD-like --- --- Maintainer : thaldyron@gmail.com --- Stability : provisional --- Portability : portable --- --- Interface to the world-file that contains a list of explicitly --- requested packages. Meant to be imported qualified. --- --- A world file entry stores the package-name, package-version, and --- user flags. --- For example, the entry generated by --- # cabal install stm-io-hooks --flags="-debug" --- looks like this: --- # stm-io-hooks -any --flags="-debug" --- To rebuild/upgrade the packages in world (e.g. when updating the compiler) --- use --- # cabal install world --- ------------------------------------------------------------------------------ -module Distribution.Client.World ( - WorldPkgInfo(..), - insert, - delete, - getContents, - ) where - -import Prelude (sequence) -import Distribution.Client.Compat.Prelude hiding (getContents) - -import Distribution.Types.Dependency -import Distribution.Types.Flag - ( FlagAssignment, FlagName, unFlagAssignment - , unFlagName, parsecFlagAssignmentNonEmpty ) -import Distribution.Simple.Utils - ( die', info, chattyTry, writeFileAtomic ) -import qualified Distribution.Compat.CharParsing as P -import qualified Text.PrettyPrint as Disp - -import Data.List - ( unionBy, deleteFirstsBy ) -import System.IO.Error - ( isDoesNotExistError ) -import qualified Data.ByteString.Lazy.Char8 as B - - -data WorldPkgInfo = WorldPkgInfo Dependency FlagAssignment - deriving (Show,Eq, Generic) - --- | Adds packages to the world file; creates the file if it doesn't --- exist yet. Version constraints and flag assignments for a package are --- updated if already present. IO errors are non-fatal. -insert :: Verbosity -> FilePath -> [WorldPkgInfo] -> IO () -insert = modifyWorld $ unionBy equalUDep - --- | Removes packages from the world file. --- Note: Currently unused as there is no mechanism in Cabal (yet) to --- handle uninstalls. IO errors are non-fatal. -delete :: Verbosity -> FilePath -> [WorldPkgInfo] -> IO () -delete = modifyWorld $ flip (deleteFirstsBy equalUDep) - --- | WorldPkgInfo values are considered equal if they refer to --- the same package, i.e., we don't care about differing versions or flags. -equalUDep :: WorldPkgInfo -> WorldPkgInfo -> Bool -equalUDep (WorldPkgInfo (Dependency pkg1 _ _) _) - (WorldPkgInfo (Dependency pkg2 _ _) _) = pkg1 == pkg2 - --- | Modifies the world file by applying an update-function ('unionBy' --- for 'insert', 'deleteFirstsBy' for 'delete') to the given list of --- packages. IO errors are considered non-fatal. -modifyWorld :: ([WorldPkgInfo] -> [WorldPkgInfo] - -> [WorldPkgInfo]) - -- ^ Function that defines how - -- the list of user packages are merged with - -- existing world packages. - -> Verbosity - -> FilePath -- ^ Location of the world file - -> [WorldPkgInfo] -- ^ list of user supplied packages - -> IO () -modifyWorld _ _ _ [] = return () -modifyWorld f verbosity world pkgs = - chattyTry "Error while updating world-file. " $ do - pkgsOldWorld <- getContents verbosity world - -- Filter out packages that are not in the world file: - let pkgsNewWorld = nubBy equalUDep $ f pkgs pkgsOldWorld - -- 'Dependency' is not an Ord instance, so we need to check for - -- equivalence the awkward way: - if not (all (`elem` pkgsOldWorld) pkgsNewWorld && - all (`elem` pkgsNewWorld) pkgsOldWorld) - then do - info verbosity "Updating world file..." - writeFileAtomic world . B.pack $ unlines - [ (prettyShow pkg) | pkg <- pkgsNewWorld] - else - info verbosity "World file is already up to date." - - --- | Returns the content of the world file as a list -getContents :: Verbosity -> FilePath -> IO [WorldPkgInfo] -getContents verbosity world = do - content <- safelyReadFile world - let result :: [Maybe WorldPkgInfo] - result = map simpleParsec (lines $ B.unpack content) - case sequence result of - Nothing -> die' verbosity "Could not parse world file." - Just xs -> return xs - where - safelyReadFile :: FilePath -> IO B.ByteString - safelyReadFile file = B.readFile file `catchIO` handler - where - handler e | isDoesNotExistError e = return B.empty - | otherwise = ioError e - - -instance Pretty WorldPkgInfo where - pretty (WorldPkgInfo dep flags) = pretty dep Disp.<+> dispFlags (unFlagAssignment flags) - where - dispFlags [] = Disp.empty - dispFlags fs = Disp.text "--flags=" - <<>> Disp.doubleQuotes (flagAssToDoc fs) - flagAssToDoc :: [(FlagName, Bool)] -> Disp.Doc - flagAssToDoc = foldr (\(fname,val) flagAssDoc -> - (if not val then Disp.char '-' - else Disp.char '+') - <<>> Disp.text (unFlagName fname) - Disp.<+> flagAssDoc) - Disp.empty - -instance Parsec WorldPkgInfo where - parsec = do - dep <- parsec - P.spaces - flagAss <- P.option mempty parseFlagAssignment - return $ WorldPkgInfo dep flagAss - where - parseFlagAssignment :: CabalParsing m => m FlagAssignment - parseFlagAssignment = do - _ <- P.string "--flags=" - inDoubleQuotes parsecFlagAssignmentNonEmpty - where - inDoubleQuotes = P.between (P.char '"') (P.char '"') diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs b/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs index 2da6c9f9780..3a26ca2e560 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ArbitraryInstances.hs @@ -38,7 +38,6 @@ import Distribution.Client.Targets import Distribution.Client.Types (RepoName (..), WriteGhcEnvironmentFilesPolicy) import Distribution.Client.Types.AllowNewer import Distribution.Client.Types.OverwritePolicy (OverwritePolicy) -import Distribution.Client.World (WorldPkgInfo (..)) import Distribution.Solver.Types.OptionalStanza (OptionalStanza (..), OptionalStanzaMap, OptionalStanzaSet, optStanzaSetFromList, optStanzaTabulate) import Distribution.Solver.Types.PackageConstraint (PackageProperty (..)) @@ -252,14 +251,6 @@ instance Arbitrary RelaxedDep where arbitrary = genericArbitrary shrink = genericShrink -------------------------------------------------------------------------------- --- WorldPkgInfo -------------------------------------------------------------------------------- - -instance Arbitrary WorldPkgInfo where - arbitrary = WorldPkgInfo <$> arbitrary <*> arbitrary - shrink = genericShrink - ------------------------------------------------------------------------------- -- UserConstraint ------------------------------------------------------------------------------- diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Described.hs b/cabal-install/tests/UnitTests/Distribution/Client/Described.hs index 3c3cbc41df8..820cdf95a70 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Described.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Described.hs @@ -18,7 +18,6 @@ import Distribution.Client.IndexUtils.Timestamp (Timestamp) import Distribution.Client.Targets (UserConstraint) import Distribution.Client.Types (RepoName) import Distribution.Client.Types.AllowNewer (RelaxDepSubject, RelaxDeps, RelaxedDep) -import Distribution.Client.World (WorldPkgInfo) tests :: TestTree tests = testGroup "Described" @@ -31,7 +30,6 @@ tests = testGroup "Described" , testDescribed (Proxy :: Proxy RelaxedDep) , testDescribed (Proxy :: Proxy RelaxDeps) , testDescribed (Proxy :: Proxy UserConstraint) - , testDescribed (Proxy :: Proxy WorldPkgInfo) , testDescribed (Proxy :: Proxy InstallOutcome) , testDescribed (Proxy :: Proxy Outcome) ] diff --git a/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs b/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs index 5081b849311..d0e2ad43a84 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/DescribedInstances.hs @@ -7,7 +7,6 @@ import Distribution.Client.Compat.Prelude import Distribution.Described import Data.List ((\\)) -import Distribution.Types.Dependency (Dependency) import Distribution.Types.PackageId (PackageIdentifier) import Distribution.Types.PackageName (PackageName) import Distribution.Types.VersionRange (VersionRange) @@ -19,7 +18,6 @@ import Distribution.Client.IndexUtils.Timestamp (Timestamp) import Distribution.Client.Targets (UserConstraint) import Distribution.Client.Types (RepoName) import Distribution.Client.Types.AllowNewer (RelaxDepSubject, RelaxDeps, RelaxedDep) -import Distribution.Client.World (WorldPkgInfo) import Distribution.Client.Glob (FilePathGlob) ------------------------------------------------------------------------------- @@ -79,15 +77,6 @@ instance Described FilePathGlob where normal = reChars $ ['\0'..'\128'] \\ "*{},/\\" escape = fromString "\\" <> reChars "*{}," -------------------------------------------------------------------------------- --- WorldPkgInfo -------------------------------------------------------------------------------- - -instance Described WorldPkgInfo where - describe _ = - describe (Proxy :: Proxy Dependency) - <> REOpt (RESpaces1 <> "--flags=\"" <> describeFlagAssignmentNonEmpty <> "\"") - ------------------------------------------------------------------------------- -- AllowNewer ------------------------------------------------------------------------------- diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index fc9d0c36f77..f020bd3abf1 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -384,7 +384,6 @@ instance Arbitrary ProjectConfigBuildOnly where <*> arbitrary <*> arbitrary <*> (fmap getShortToken <$> arbitrary) - <*> arbitrary <*> arbitraryNumJobs <*> arbitrary <*> arbitrary @@ -406,7 +405,6 @@ instance Arbitrary ProjectConfigBuildOnly where , projectConfigBuildReports = x05 , projectConfigReportPlanningFailure = x06 , projectConfigSymlinkBinDir = x07 - , projectConfigOneShot = x08 , projectConfigNumJobs = x09 , projectConfigKeepGoing = x10 , projectConfigOfflineMode = x11 @@ -425,7 +423,6 @@ instance Arbitrary ProjectConfigBuildOnly where , projectConfigBuildReports = x05' , projectConfigReportPlanningFailure = x06' , projectConfigSymlinkBinDir = x07' - , projectConfigOneShot = x08' , projectConfigNumJobs = postShrink_NumJobs x09' , projectConfigKeepGoing = x10' , projectConfigOfflineMode = x11' @@ -436,12 +433,12 @@ instance Arbitrary ProjectConfigBuildOnly where , projectConfigLogsDir = x16 , projectConfigClientInstallFlags = x17' } | ((x00', x01', x02', x03', x04'), - (x05', x06', x07', x08', x09'), + (x05', x06', x07', x09'), (x10', x11', x12', x14'), ( x17', x18' )) <- shrink ((x00, x01, x02, x03, x04), - (x05, x06, x07, x08, preShrink_NumJobs x09), + (x05, x06, x07, preShrink_NumJobs x09), (x10, x11, x12, x14), ( x17, x18 )) ] diff --git a/changelog.d/issue-6767 b/changelog.d/issue-6767 new file mode 100644 index 00000000000..fd4f66ee177 --- /dev/null +++ b/changelog.d/issue-6767 @@ -0,0 +1,17 @@ +synopsis: Remove World file functionality +packages: cabal-install +issues: #6767 +prs: #7746 +description: { +In v1-install, 'world' was used to trace what packages have been +installed, and re-install everything that is listed in it on-demand. However, in +v2-install, this is no longer needed, and outdated. +Additionally, 'world' code-path is probably not up-to-date, remove it instead of +having partial features. + +- Don't generate `world` file in `~/.cabal` when `v1-install` is executed. + +- Don't ever read `world` from `~/.cabal`. + +- Remove meta-target `world` from `v1-install`. +} diff --git a/doc/cabal-project.rst b/doc/cabal-project.rst index 6ac3b6b8e16..011c120fbe8 100644 --- a/doc/cabal-project.rst +++ b/doc/cabal-project.rst @@ -1521,17 +1521,8 @@ Advanced global configuration options The command line variant of this flag is ``--build-summary=TEMPLATE``. -.. cfg-field:: world-file: path - --world-file=FILE - :deprecated: - - [STRIKEOUT:The location of the world file.] Deprecated. - - The command line variant of this flag is ``--world-file=FILE``. - Undocumented fields: ``root-cmd``, ``symlink-bindir``, ``build-log``, -``remote-build-reporting``, ``report-planned-failure``, ``one-shot``, -``offline``. +``remote-build-reporting``, ``report-planned-failure``, ``offline``. Advanced solver options ^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/release.py b/release.py index 888d9e6ffa0..f22531e4138 100755 --- a/release.py +++ b/release.py @@ -144,7 +144,6 @@ def step_config(args: Args): logs-dir: {args.builddir}/cabal/logs store-dir: {args.builddir}/cabal/store symlink-bindir: {args.builddir}/bin - world-file: {args.builddir}/cabal/world extra-prog-path: {extraprogpath} jobs: 1