@@ -13,15 +13,15 @@ import Control.Monad
13
13
import Control.Monad.Catch (MonadMask , throwM )
14
14
import Control.Monad.IO.Class
15
15
import Control.Monad.Logger
16
- import Control.Monad.Reader (asks , MonadReader )
16
+ import Control.Monad.Reader (MonadReader , asks )
17
17
import Control.Monad.Trans.Control (MonadBaseControl )
18
18
import qualified Data.ByteString.Builder as B
19
- import qualified Data.ByteString.Lazy as L
20
19
import qualified Data.ByteString.Char8 as BC
20
+ import qualified Data.ByteString.Lazy as L
21
+ import qualified Data.Foldable as F
21
22
import Data.Function (on )
22
23
import qualified Data.HashMap.Strict as HM
23
24
import qualified Data.IntMap as IntMap
24
- import qualified Data.Foldable as F
25
25
import Data.List (intersect , maximumBy )
26
26
import Data.List.Extra (nubOrd )
27
27
import Data.Map (Map )
@@ -35,13 +35,13 @@ import Network.HTTP.Client.Conduit (HasHttpManager)
35
35
import Path
36
36
import Path.IO
37
37
import Stack.BuildPlan
38
+ import Stack.Config (getSnapshots ,
39
+ makeConcreteResolver )
38
40
import Stack.Constants
39
41
import Stack.Solver
40
42
import Stack.Types
41
- import Stack.Types.Internal ( HasTerminal , HasReExec
42
- , HasLogLevel )
43
- import Stack.Config ( getSnapshots
44
- , makeConcreteResolver )
43
+ import Stack.Types.Internal (HasLogLevel , HasReExec ,
44
+ HasTerminal )
45
45
import qualified System.FilePath as FP
46
46
47
47
-- | Generate stack.yaml
@@ -57,6 +57,7 @@ initProject
57
57
initProject currDir initOpts mresolver = do
58
58
let dest = currDir </> stackDotYaml
59
59
60
+ dirs <- mapM (resolveDir' . T. unpack) (searchDirs initOpts)
60
61
reldest <- toFilePath `liftM` makeRelativeToCurrentDir dest
61
62
62
63
exists <- doesFileExist dest
@@ -67,8 +68,10 @@ initProject currDir initOpts mresolver = do
67
68
68
69
let noPkgMsg = " In order to init, you should have an existing .cabal \
69
70
\file. Please try \" stack new\" instead."
70
-
71
- cabalfps <- findCabalFiles (includeSubDirs initOpts) currDir
71
+ let findCabalFiles' = findCabalFiles (includeSubDirs initOpts)
72
+ cabalfps <- if null dirs
73
+ then findCabalFiles' currDir
74
+ else liftM concat $ mapM findCabalFiles' dirs
72
75
(bundle, dupPkgs) <- cabalPackagesCheck cabalfps noPkgMsg Nothing
73
76
74
77
(r, flags, extraDeps, rbundle) <- getDefaultResolver dest initOpts
@@ -435,12 +438,14 @@ getRecommendedSnapshots snapshots = do
435
438
]
436
439
437
440
data InitOpts = InitOpts
438
- { useSolver :: Bool
441
+ { useSolver :: Bool
439
442
-- ^ Use solver to determine required external dependencies
440
- , omitPackages :: Bool
443
+ , omitPackages :: Bool
441
444
-- ^ Exclude conflicting or incompatible user packages
442
445
, forceOverwrite :: Bool
443
446
-- ^ Overwrite existing stack.yaml
444
447
, includeSubDirs :: Bool
445
448
-- ^ If True, include all .cabal files found in any sub directories
449
+ , searchDirs :: ! [T. Text ]
450
+ -- ^ List of sub directories to search for .cabal files
446
451
}
0 commit comments