@@ -15,8 +15,8 @@ import Control.Applicative ((<|>), (<$>), (<*>), pure)
1515import Control.Exception
1616import Control.Monad (liftM , mzero )
1717import Control.Monad.Catch (MonadThrow , throwM )
18- import Control.Monad.Reader (MonadReader , ask , asks , MonadIO , liftIO )
1918import Control.Monad.Logger (LogLevel (.. ))
19+ import Control.Monad.Reader (MonadReader , ask , asks , MonadIO , liftIO )
2020import Data.Aeson.Extended
2121 (ToJSON , toJSON , FromJSON , parseJSON , withText , withObject , object ,
2222 (.=) , (.:) , (..:) , (..:?) , (..!=) , Value (String , Object ),
@@ -29,9 +29,9 @@ import Data.Either (partitionEithers)
2929import Data.Hashable (Hashable )
3030import Data.Map (Map )
3131import qualified Data.Map as Map
32+ import Data.Monoid
3233import Data.Set (Set )
3334import qualified Data.Set as Set
34- import Data.Monoid
3535import Data.Text (Text )
3636import qualified Data.Text as T
3737import Data.Text.Encoding (encodeUtf8 , decodeUtf8 )
@@ -40,9 +40,9 @@ import Data.Yaml (ParseException)
4040import Distribution.System (Platform )
4141import qualified Distribution.Text
4242import Distribution.Version (anyVersion )
43- import qualified Paths_stack as Meta
4443import Network.HTTP.Client (parseUrl )
4544import Path
45+ import qualified Paths_stack as Meta
4646import Stack.Types.BuildPlan (SnapName , renderSnapName , parseSnapName )
4747import Stack.Types.Docker
4848import Stack.Types.FlagName
@@ -111,6 +111,12 @@ data Config =
111111 ,configConcurrentTests :: ! Bool
112112 -- ^ Run test suites concurrently
113113 ,configImage :: ! ImageOpts
114+ ,configAuthorEmail :: ! (Maybe Text )
115+ -- ^ Email of the author using stack.
116+ ,configAuthorName :: ! (Maybe Text )
117+ -- ^ Name of the author using stack.
118+ ,configScmInit :: ! (Maybe SCM )
119+ -- ^ Initialize SCM (e.g. git) when creating new projects.
114120 }
115121
116122-- | Information on a single package index
@@ -500,6 +506,12 @@ data ConfigMonoid =
500506 -- ^ Used to override the binary installation dir
501507 ,configMonoidImageOpts :: ! ImageOptsMonoid
502508 -- ^ Image creation options.
509+ ,configMonoidAuthorEmail :: ! (Maybe Text )
510+ -- ^ Author's email address.
511+ ,configMonoidAuthorName :: ! (Maybe Text )
512+ -- ^ Author's name.
513+ ,configMonoidScmInit :: ! (Maybe SCM )
514+ -- ^ Initialize SCM (e.g. git init) when making new projects?
503515 }
504516 deriving Show
505517
@@ -523,6 +535,9 @@ instance Monoid ConfigMonoid where
523535 , configMonoidConcurrentTests = Nothing
524536 , configMonoidLocalBinPath = Nothing
525537 , configMonoidImageOpts = mempty
538+ , configMonoidAuthorEmail = mempty
539+ , configMonoidAuthorName = mempty
540+ , configMonoidScmInit = Nothing
526541 }
527542 mappend l r = ConfigMonoid
528543 { configMonoidDockerOpts = configMonoidDockerOpts l <> configMonoidDockerOpts r
@@ -544,6 +559,9 @@ instance Monoid ConfigMonoid where
544559 , configMonoidConcurrentTests = configMonoidConcurrentTests l <|> configMonoidConcurrentTests r
545560 , configMonoidLocalBinPath = configMonoidLocalBinPath l <|> configMonoidLocalBinPath r
546561 , configMonoidImageOpts = configMonoidImageOpts l <> configMonoidImageOpts r
562+ , configMonoidAuthorName = configMonoidAuthorName l <|> configMonoidAuthorName r
563+ , configMonoidAuthorEmail = configMonoidAuthorEmail l <|> configMonoidAuthorEmail r
564+ , configMonoidScmInit = configMonoidScmInit l <|> configMonoidScmInit r
547565 }
548566
549567instance FromJSON (ConfigMonoid , [JSONWarning ]) where
@@ -574,6 +592,9 @@ parseConfigMonoidJSON obj = do
574592 configMonoidConcurrentTests <- obj ..:? " concurrent-tests"
575593 configMonoidLocalBinPath <- obj ..:? " local-bin-path"
576594 configMonoidImageOpts <- jsonSubWarnings (obj ..:? " image" ..!= mempty )
595+ configMonoidAuthorName <- obj ..:? authorNameKey
596+ configMonoidAuthorEmail <- obj ..:? authorEmailKey
597+ configMonoidScmInit <- obj ..:? scmInitKey
577598 return ConfigMonoid {.. }
578599
579600-- | Newtype for non-orphan FromJSON instance.
@@ -849,3 +870,29 @@ packageEntryCurrDir = PackageEntry
849870 , peLocation = PLFilePath " ."
850871 , peSubdirs = []
851872 }
873+
874+ -- | A software control system.
875+ data SCM = Git
876+ deriving (Show )
877+
878+ instance FromJSON SCM where
879+ parseJSON v = do
880+ s <- parseJSON v
881+ case s of
882+ " git" -> return Git
883+ _ -> fail (" Unknown or unsupported SCM: " <> s)
884+
885+ instance ToJSON SCM where
886+ toJSON Git = toJSON (" git" :: Text )
887+
888+ -- | Key used for the YAML file and templates.
889+ authorEmailKey :: Text
890+ authorEmailKey = " author-email"
891+
892+ -- | Key used for the YAML file and templates.
893+ authorNameKey :: Text
894+ authorNameKey = " author-name"
895+
896+ -- | Key used for the YAML file and templates.
897+ scmInitKey :: Text
898+ scmInitKey = " scm-init"
0 commit comments