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

Reply via email to