Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/4fde618896b9da8f5b97a6fdd2825a1d3bf09816 >--------------------------------------------------------------- commit 4fde618896b9da8f5b97a6fdd2825a1d3bf09816 Author: Duncan Coutts <[email protected]> Date: Wed Jan 14 13:32:20 2009 +0000 cabal update now reports if a newer version of cabal-install is available >--------------------------------------------------------------- cabal-install/Distribution/Client/Update.hs | 35 +++++++++++++++++++++++--- 1 files changed, 31 insertions(+), 4 deletions(-) diff --git a/cabal-install/Distribution/Client/Update.hs b/cabal-install/Distribution/Client/Update.hs index 1c42661..601927c 100644 --- a/cabal-install/Distribution/Client/Update.hs +++ b/cabal-install/Distribution/Client/Update.hs @@ -15,22 +15,34 @@ module Distribution.Client.Update ) where import Distribution.Client.Types - ( Repo(..), RemoteRepo(..), LocalRepo(..) ) + ( Repo(..), RemoteRepo(..), LocalRepo(..), AvailablePackageDb(..) ) import Distribution.Client.Fetch ( downloadIndex ) import qualified Distribution.Client.Utils as BS ( writeFileAtomic ) +import qualified Distribution.Simple.PackageIndex as PackageIndex +import Distribution.Client.IndexUtils + ( getAvailablePackages ) +import qualified Paths_cabal_install + ( version ) -import Distribution.Simple.Utils (notice) -import Distribution.Verbosity (Verbosity) +import Distribution.Package + ( PackageName(..), packageId, packageVersion ) +import Distribution.Simple.Utils + ( notice, comparing ) +import Distribution.Verbosity + ( Verbosity ) import qualified Data.ByteString.Lazy as BS import qualified Codec.Compression.GZip as GZip (decompress) import System.FilePath (dropExtension) +import Data.List (maximumBy) -- | 'update' downloads the package list from all known servers update :: Verbosity -> [Repo] -> IO () -update verbosity = mapM_ (updateRepo verbosity) +update verbosity repos = do + mapM_ (updateRepo verbosity) repos + checkForSelfUpgrade verbosity repos updateRepo :: Verbosity -> Repo -> IO () updateRepo verbosity repo = case repoKind repo of @@ -41,3 +53,18 @@ updateRepo verbosity repo = case repoKind repo of indexPath <- downloadIndex verbosity remoteRepo (repoLocalDir repo) BS.writeFileAtomic (dropExtension indexPath) . GZip.decompress =<< BS.readFile indexPath + +checkForSelfUpgrade :: Verbosity -> [Repo] -> IO () +checkForSelfUpgrade verbosity repos = do + AvailablePackageDb available _ <- getAvailablePackages verbosity repos + + let self = PackageName "cabal-install" + pkgs = PackageIndex.lookupPackageName available self + latestVersion = packageVersion (maximumBy (comparing packageId) pkgs) + currentVersion = Paths_cabal_install.version + + if not (null pkgs) && latestVersion > currentVersion + then notice verbosity $ + "Note: there is a new version of cabal-install available.\n" + ++ "To upgrade, run: cabal install cabal-install" + else return () _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
