Skip to content

Commit 9b77f56

Browse files
committed
Merge sandbox UI changes
The standard commands (e.g. configure, build) now use the sandbox, if present.
2 parents b89d894 + f2a2ddc commit 9b77f56

File tree

5 files changed

+412
-577
lines changed

5 files changed

+412
-577
lines changed

cabal-install/Distribution/Client/Index.hs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,24 @@
88
-----------------------------------------------------------------------------
99

1010
module Distribution.Client.Index (
11-
index,
12-
1311
createEmpty,
1412
addBuildTreeRefs,
1513
removeBuildTreeRefs,
1614
listBuildTreeRefs,
15+
validateIndexPath,
1716

1817
defaultIndexFileName
1918
) where
2019

2120
import qualified Distribution.Client.Tar as Tar
2221
import Distribution.Client.IndexUtils ( getSourcePackages )
2322
import Distribution.Client.PackageIndex ( allPackages )
24-
import Distribution.Client.Setup ( IndexFlags(..) )
2523
import Distribution.Client.Types ( Repo(..), LocalRepo(..)
2624
, SourcePackageDb(..)
2725
, SourcePackage(..), PackageLocation(..) )
2826
import Distribution.Client.Utils ( byteStringToFilePath, filePathToByteString
2927
, makeAbsoluteToCwd )
3028

31-
import Distribution.Simple.Setup ( fromFlagOrDefault )
3229
import Distribution.Simple.Utils ( die, debug, info, findPackageDesc )
3330
import Distribution.Verbosity ( Verbosity )
3431

@@ -52,34 +49,6 @@ newtype BuildTreeRef = BuildTreeRef {
5249
defaultIndexFileName :: FilePath
5350
defaultIndexFileName = "00-index.tar"
5451

55-
-- | Entry point for the 'cabal index' command.
56-
index :: Verbosity -> IndexFlags -> FilePath -> IO ()
57-
index verbosity indexFlags path' = do
58-
let runInit = fromFlagOrDefault False (indexInit indexFlags)
59-
let refsToAdd = indexLinkSource indexFlags
60-
let runLinkSource = not . null $ refsToAdd
61-
let refsToRemove = indexRemoveSource indexFlags
62-
let runRemoveSource = not . null $ refsToRemove
63-
let runList = fromFlagOrDefault False (indexList indexFlags)
64-
65-
unless (or [runInit, runLinkSource, runRemoveSource, runList]) $
66-
die "no arguments passed to the 'index' command"
67-
68-
path <- validateIndexPath path'
69-
70-
when runInit $
71-
createEmpty verbosity path
72-
73-
when runLinkSource $
74-
addBuildTreeRefs verbosity path refsToAdd
75-
76-
when runRemoveSource $
77-
removeBuildTreeRefs verbosity path refsToRemove
78-
79-
when runList $ do
80-
refs <- listBuildTreeRefs verbosity path
81-
mapM_ putStrLn refs
82-
8352
-- | Given a path, ensure that it refers to a local build tree.
8453
buildTreeRefFromPath :: FilePath -> IO (Maybe BuildTreeRef)
8554
buildTreeRefFromPath dir = do

cabal-install/Distribution/Client/PackageEnvironment.hs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@
1111
module Distribution.Client.PackageEnvironment (
1212
PackageEnvironment(..)
1313
, IncludeComments(..)
14+
, PackageEnvironmentType(..)
15+
, classifyPackageEnvironment
1416
, createPackageEnvironment
1517
, tryLoadPackageEnvironment
1618
, readPackageEnvironmentFile
1719
, showPackageEnvironment
1820
, showPackageEnvironmentWithComments
1921
, setPackageDB
22+
, loadUserConfig
2023

2124
, basePackageEnvironment
2225
, initialPackageEnvironment
@@ -49,7 +52,7 @@ import Control.Monad ( foldM, when )
4952
import Data.List ( partition )
5053
import Data.Monoid ( Monoid(..) )
5154
import Distribution.Compat.Exception ( catchIO )
52-
import System.Directory ( renameFile )
55+
import System.Directory ( doesFileExist, renameFile )
5356
import System.FilePath ( (<.>), (</>) )
5457
import System.IO.Error ( isDoesNotExistError )
5558
import Text.PrettyPrint ( ($+$) )
@@ -67,6 +70,8 @@ import qualified Distribution.Text as Text
6770
-- TODO: would be nice to remove duplication between D.C.PackageEnvironment and
6871
-- D.C.Config.
6972
data PackageEnvironment = PackageEnvironment {
73+
-- The 'inherit' feature is not used ATM, but could be useful in the future
74+
-- for constructing nested sandboxes (see discussion in #1196).
7075
pkgEnvInherit :: Flag FilePath,
7176
pkgEnvSavedConfig :: SavedConfig
7277
}
@@ -94,6 +99,25 @@ sandboxPackageEnvironmentFile = "cabal.sandbox.config"
9499
userPackageEnvironmentFile :: FilePath
95100
userPackageEnvironmentFile = "cabal.config"
96101

102+
-- | Type of the current package environment.
103+
data PackageEnvironmentType =
104+
SandboxPackageEnvironment -- ^ './cabal.sandbox.config'
105+
| UserPackageEnvironment -- ^ './cabal.config'
106+
| AmbientPackageEnvironment -- ^ '~/.cabal/config'
107+
108+
-- | Is there a 'cabal.sandbox.config' or 'cabal.config' in this
109+
-- directory?
110+
classifyPackageEnvironment :: FilePath -> IO PackageEnvironmentType
111+
classifyPackageEnvironment pkgEnvDir = do
112+
isSandbox <- configExists sandboxPackageEnvironmentFile
113+
isUser <- configExists userPackageEnvironmentFile
114+
case (isSandbox, isUser) of
115+
(True, _) -> return SandboxPackageEnvironment
116+
(False, True) -> return UserPackageEnvironment
117+
(False, False) -> return AmbientPackageEnvironment
118+
where
119+
configExists fname = doesFileExist (pkgEnvDir </> fname)
120+
97121
-- | Defaults common to 'initialPackageEnvironment' and
98122
-- 'commentPackageEnvironment'.
99123
commonPackageEnvironmentConfig :: FilePath -> SavedConfig
@@ -233,6 +257,11 @@ userPackageEnvironment verbosity pkgEnvDir = do
233257
++ maybe "" (\n -> ":" ++ show n) line ++ ":\n" ++ msg
234258
return mempty
235259

260+
-- | Same as @userPackageEnvironmentFile@, but returns a SavedConfig.
261+
loadUserConfig :: Verbosity -> FilePath -> IO SavedConfig
262+
loadUserConfig verbosity pkgEnvDir = fmap pkgEnvSavedConfig
263+
$ userPackageEnvironment verbosity pkgEnvDir
264+
236265
-- | Try to load the package environment file ("cabal.sandbox.config"), exiting
237266
-- with error if it doesn't exist. Also returns the path to the sandbox
238267
-- directory. Note that the path parameter should be a name of an existing
@@ -265,6 +294,7 @@ tryLoadPackageEnvironment verbosity pkgEnvDir configFileFlag = do
265294
user <- userPackageEnvironment verbosity pkgEnvDir
266295
inherited <- inheritedPackageEnvironment verbosity user
267296

297+
-- Layer the package environment settings over settings from ~/.cabal/config.
268298
cabalConfig <- loadConfig verbosity configFileFlag NoFlag
269299
return (sandboxDir,
270300
base `mappend` (cabalConfig `overrideSandboxSettings`

0 commit comments

Comments
 (0)