Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/27d763d3b48289b1dbd02b14ba7327123fa5142d >--------------------------------------------------------------- commit 27d763d3b48289b1dbd02b14ba7327123fa5142d Author: Duncan Coutts <[email protected]> Date: Wed Nov 4 14:26:58 2009 +0000 Add a couple checks to "cabal unpack" and improve the messages >--------------------------------------------------------------- cabal-install/Distribution/Client/Unpack.hs | 39 +++++++++++++++++++------- 1 files changed, 28 insertions(+), 11 deletions(-) diff --git a/cabal-install/Distribution/Client/Unpack.hs b/cabal-install/Distribution/Client/Unpack.hs index b346180..b7ff281 100644 --- a/cabal-install/Distribution/Client/Unpack.hs +++ b/cabal-install/Distribution/Client/Unpack.hs @@ -17,10 +17,14 @@ module Distribution.Client.Unpack ( ) where -import Distribution.Package ( packageId, Dependency(..) ) +import Distribution.Package + ( PackageId, packageId, Dependency(..) ) import Distribution.Client.PackageIndex as PackageIndex (lookupDependency) import Distribution.Simple.Setup(fromFlag, fromFlagOrDefault) -import Distribution.Simple.Utils(info, notice, die) +import Distribution.Simple.Utils + ( notice, die ) +import Distribution.Verbosity + ( Verbosity ) import Distribution.Text(display) import Distribution.Version ( anyVersion, intersectVersionRanges ) @@ -36,11 +40,14 @@ import qualified Distribution.Client.Tar as Tar (extractTarGzFile) import Distribution.Client.IndexUtils as IndexUtils (getAvailablePackages, disambiguateDependencies) -import System.Directory(createDirectoryIfMissing) -import Control.Monad(unless) +import System.Directory + ( createDirectoryIfMissing, doesDirectoryExist, doesFileExist ) +import Control.Monad + ( unless, when ) import Data.Ord (comparing) import Data.List(null, maximumBy) -import System.FilePath((</>)) +import System.FilePath + ( (</>), addTrailingPathSeparator ) import qualified Data.Map as Map unpack :: UnpackFlags -> [Repo] -> [Dependency] -> IO () @@ -67,12 +74,8 @@ unpack flags repos deps ++ " that satisfies " ++ display ver Right (AvailablePackage pkgid _ (RepoTarballPackage repo)) -> do - pkgPath <- fetchPackage verbosity repo pkgid - let pkgdir = display pkgid - notice verbosity $ "Unpacking " ++ pkgdir ++ "..." - info verbosity $ "Extracting " ++ pkgPath - ++ " to " ++ prefix </> pkgdir ++ "..." - Tar.extractTarGzFile prefix pkgdir pkgPath + pkgPath <- fetchPackage verbosity repo pkgid + unpackPackage verbosity prefix pkgid pkgPath Right (AvailablePackage _ _ LocalUnpackedPackage) -> error "Distribution.Client.Unpack.unpack: the impossible happened." @@ -81,6 +84,20 @@ unpack flags repos deps prefix = fromFlagOrDefault "" (unpackDestDir flags) toUnresolved d = UnresolvedDependency d [] +unpackPackage :: Verbosity -> FilePath -> PackageId -> FilePath -> IO () +unpackPackage verbosity prefix pkgid pkgPath = do + let pkgdirname = display pkgid + pkgdir = prefix </> pkgdirname + pkgdir' = addTrailingPathSeparator pkgdir + existsDir <- doesDirectoryExist pkgdir + when existsDir $ die $ + "The directory \"" ++ pkgdir' ++ "\" already exists, not unpacking." + existsFile <- doesFileExist pkgdir + when existsFile $ die $ + "A file \"" ++ pkgdir ++ "\" is in the way, not unpacking." + notice verbosity $ "Unpacking to " ++ pkgdir' + Tar.extractTarGzFile prefix pkgdirname pkgPath + resolvePackages :: AvailablePackageDb -> [Dependency] -> [Either Dependency AvailablePackage] _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
