Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/8b68cfb158721c2705cb6671398ea2b0952e6b46 >--------------------------------------------------------------- commit 8b68cfb158721c2705cb6671398ea2b0952e6b46 Author: Duncan Coutts <[email protected]> Date: Mon Feb 2 01:22:55 2009 +0000 Use the new withTempDirectory function In particular it means that install will unpack packages into different temp dirs on each invocation which means that running install on the same package for different compilers at the same time should not clash. This is quite useful for testing. >--------------------------------------------------------------- cabal-install/Distribution/Client/Install.hs | 30 +++++++++++++------------- cabal-install/Distribution/Client/SrcDist.hs | 17 ++++++-------- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs index 777593e..d0afb67 100644 --- a/cabal-install/Distribution/Client/Install.hs +++ b/cabal-install/Distribution/Client/Install.hs @@ -82,7 +82,7 @@ import Distribution.Simple.Setup import qualified Distribution.Simple.Setup as Cabal ( installCommand, InstallFlags(..), emptyInstallFlags ) import Distribution.Simple.Utils - ( defaultPackageDesc, rawSystemExit, withTempDirectory, comparing ) + ( defaultPackageDesc, rawSystemExit, comparing ) import Distribution.Simple.InstallDirs ( fromPathTemplate, toPathTemplate , initialPathTemplateEnv, substPathTemplate ) @@ -104,7 +104,7 @@ import Distribution.Version import Distribution.Simple.Utils as Utils ( notice, info, warn, die, intercalate ) import Distribution.Client.Utils - ( inDir, mergeBy, MergeResult(..) ) + ( inDir, mergeBy, MergeResult(..), withTempDirectory ) import Distribution.System ( Platform(Platform), buildPlatform, OS(Windows), buildOS ) import Distribution.Text @@ -525,19 +525,19 @@ installAvailablePackage _ _ LocalUnpackedPackage installPkg = installAvailablePackage verbosity pkgid (RepoTarballPackage repo) installPkg = onFailure DownloadFailed $ do pkgPath <- fetchPackage verbosity repo pkgid - tmp <- getTemporaryDirectory - let tmpDirPath = tmp </> ("TMP" ++ display pkgid) - path = tmpDirPath </> display pkgid - onFailure UnpackFailed $ withTempDirectory verbosity tmpDirPath $ do - info verbosity $ "Extracting " ++ pkgPath - ++ " to " ++ tmpDirPath ++ "..." - extractTarGzFile tmpDirPath pkgPath - let descFilePath = tmpDirPath </> display pkgid - </> display (packageName pkgid) <.> "cabal" - exists <- doesFileExist descFilePath - when (not exists) $ - die $ "Package .cabal file not found: " ++ show descFilePath - installPkg (Just path) + onFailure UnpackFailed $ do + tmp <- getTemporaryDirectory + withTempDirectory tmp (display pkgid) $ \tmpDirPath -> do + info verbosity $ "Extracting " ++ pkgPath + ++ " to " ++ tmpDirPath ++ "..." + extractTarGzFile tmpDirPath pkgPath + let unpackedPath = tmpDirPath </> display pkgid + descFilePath = unpackedPath + </> display (packageName pkgid) <.> "cabal" + exists <- doesFileExist descFilePath + when (not exists) $ + die $ "Package .cabal file not found: " ++ show descFilePath + installPkg (Just unpackedPath) installUnpackedPackage :: Verbosity -> SetupScriptOptions diff --git a/cabal-install/Distribution/Client/SrcDist.hs b/cabal-install/Distribution/Client/SrcDist.hs index fa89b0f..b785aa4 100644 --- a/cabal-install/Distribution/Client/SrcDist.hs +++ b/cabal-install/Distribution/Client/SrcDist.hs @@ -16,8 +16,10 @@ import Distribution.PackageDescription import Distribution.PackageDescription.Parse ( readPackageDescription ) import Distribution.Simple.Utils - ( withTempDirectory , defaultPackageDesc - , die, warn, notice, setupMessage ) + ( defaultPackageDesc, warn, notice, setupMessage + , createDirectoryIfMissingVerbose ) +import Distribution.Client.Utils + ( withTempDirectory ) import Distribution.Simple.Setup (SDistFlags(..), fromFlag) import Distribution.Verbosity (Verbosity) import Distribution.Simple.PreProcess (knownSuffixHandlers) @@ -29,7 +31,6 @@ import Distribution.Text import System.Time (getClockTime, toCalendarTime) import System.FilePath ((</>), (<.>)) -import System.Directory (doesDirectoryExist) import Control.Monad (when) import Data.Maybe (isNothing) @@ -40,20 +41,16 @@ sdist flags = do =<< readPackageDescription verbosity =<< defaultPackageDesc verbosity mb_lbi <- maybeGetPersistBuildConfig distPref - let tmpDir = srcPref distPref + let tmpTargetDir = srcPref distPref -- do some QA printPackageProblems verbosity pkg - exists <- doesDirectoryExist tmpDir - when exists $ - die $ "Source distribution already in place. please move or remove: " - ++ tmpDir - when (isNothing mb_lbi) $ warn verbosity "Cannot run preprocessors. Run 'configure' command first." - withTempDirectory verbosity tmpDir $ do + createDirectoryIfMissingVerbose verbosity True tmpTargetDir + withTempDirectory tmpTargetDir "sdist." $ \tmpDir -> do date <- toCalendarTime =<< getClockTime let pkg' | snapshot = snapshotPackage date pkg _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
