Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/8ea46d28944c48581d02071f2242ba7c1ba646f2 >--------------------------------------------------------------- commit 8ea46d28944c48581d02071f2242ba7c1ba646f2 Author: Duncan Coutts <[email protected]> Date: Sat May 10 18:59:20 2008 +0000 Move the upgrade action into the Install module It shares most code anyway. Also fixes ticket #260 becuase we use the right entry point now. >--------------------------------------------------------------- cabal-install/Hackage/Install.hs | 33 +++++++++++++++++++++++--- cabal-install/Hackage/Upgrade.hs | 45 ------------------------------------- cabal-install/Main.hs | 3 +- cabal-install/cabal-install.cabal | 1 - 4 files changed, 30 insertions(+), 52 deletions(-) diff --git a/cabal-install/Hackage/Install.hs b/cabal-install/Hackage/Install.hs index ca2091e..ccc53de 100644 --- a/cabal-install/Hackage/Install.hs +++ b/cabal-install/Hackage/Install.hs @@ -10,9 +10,10 @@ -- -- High level interface to package installation. ----------------------------------------------------------------------------- -module Hackage.Install - ( install - ) where +module Hackage.Install ( + install, + upgrade, + ) where import Data.List ( unfoldr ) @@ -25,7 +26,7 @@ import System.Directory ( getTemporaryDirectory, doesFileExist ) import System.FilePath ((</>),(<.>)) -import Hackage.Dependency (resolveDependencies) +import Hackage.Dependency (resolveDependencies, upgradableDependencies) import Hackage.Fetch (fetchPackage) -- import qualified Hackage.Info as Info import qualified Hackage.IndexUtils as IndexUtils @@ -99,6 +100,17 @@ install verbosity packageDB repos comp conf configFlags installFlags deps = planner | null deps = planLocalPackage verbosity comp configFlags | otherwise = planRepoPackages comp deps +upgrade :: Verbosity + -> PackageDB + -> [Repo] + -> Compiler + -> ProgramConfiguration + -> Cabal.ConfigFlags + -> InstallFlags + -> IO () +upgrade verbosity packageDB repos comp = + installWithPlanner (planUpgradePackages comp) verbosity packageDB repos comp + type Planner = Maybe (PackageIndex InstalledPackageInfo) -> PackageIndex AvailablePackage -> IO (Either [Dependency] (InstallPlan BuildResult)) @@ -194,6 +206,19 @@ planRepoPackages comp deps installed available = do return $ resolveDependencies buildOS buildArch (compilerId comp) installed available deps' +planUpgradePackages :: Compiler + -> Maybe (PackageIndex InstalledPackageInfo) + -> PackageIndex AvailablePackage + -> IO (Either [Dependency] (InstallPlan BuildResult)) +planUpgradePackages comp (Just installed) available = return $ + resolveDependencies buildOS buildArch (compilerId comp) (Just installed) available + [ UnresolvedDependency dep [] + | dep <- upgradableDependencies installed available ] +planUpgradePackages comp _ _ = + die $ display (compilerId comp) + ++ " does not track installed packages so cabal cannot figure out what" + ++ " packages need to be upgraded." + printDryRun :: Verbosity -> InstallPlan BuildResult -> IO () printDryRun verbosity plan = case unfoldr next plan of [] -> notice verbosity "No packages to be installed." diff --git a/cabal-install/Hackage/Upgrade.hs b/cabal-install/Hackage/Upgrade.hs deleted file mode 100644 index 9dafed1..0000000 --- a/cabal-install/Hackage/Upgrade.hs +++ /dev/null @@ -1,45 +0,0 @@ ------------------------------------------------------------------------------ --- | --- Module : Hackage.Upgrade --- Copyright : (c) Isaac Potoczny-Jones 2007 --- License : BSD-like >--------------------------------------------------------------- --- Maintainer : [email protected] --- Stability : provisional --- Portability : portable >--------------------------------------------------------------- --- High level interface to package upgrade. Gets list of installed packages --- and if there are any newer versions available, upgrades them. - ------------------------------------------------------------------------------ -module Hackage.Upgrade - ( upgrade - ) where - -import qualified Hackage.IndexUtils as IndexUtils -import Hackage.Dependency (upgradableDependencies) -import Hackage.Install (install) -import Hackage.Types (UnresolvedDependency(..), Repo) -import Hackage.Setup (InstallFlags(..)) - -import Distribution.Simple.Program (ProgramConfiguration) -import Distribution.Simple.Compiler (Compiler, PackageDB) -import Distribution.Simple.Configure (getInstalledPackages) -import Distribution.Verbosity (Verbosity) -import qualified Distribution.Simple.Setup as Cabal - -import Data.Monoid (Monoid(..)) - -upgrade :: Verbosity - -> PackageDB -> [Repo] - -> Compiler - -> ProgramConfiguration - -> Cabal.ConfigFlags - -> InstallFlags - -> IO () -upgrade verbosity packageDB repos comp conf configFlags installFlags = do - Just installed <- getInstalledPackages verbosity comp packageDB conf - available <- fmap mconcat (mapM (IndexUtils.readRepoIndex verbosity) repos) - let upgradable = upgradableDependencies installed available - install verbosity packageDB repos comp conf configFlags installFlags - [ UnresolvedDependency dep [] | dep <- upgradable ] diff --git a/cabal-install/Main.hs b/cabal-install/Main.hs index c20a843..31f15d5 100644 --- a/cabal-install/Main.hs +++ b/cabal-install/Main.hs @@ -30,9 +30,8 @@ import Hackage.Config (SavedConfig(..), savedConfigToConfigFlags, defaultConfigFile, loadConfig, configRepos, configPackageDB) import Hackage.List (list) -import Hackage.Install (install) +import Hackage.Install (install, upgrade) import Hackage.Update (update) -import Hackage.Upgrade (upgrade) import Hackage.Fetch (fetch) import Hackage.Check as Check (check) --import Hackage.Clean (clean) diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 7d4f621..f508a08 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -55,7 +55,6 @@ Executable cabal Hackage.Tar Hackage.Types Hackage.Update - Hackage.Upgrade Hackage.Upload Hackage.Utils _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
