@@ -167,7 +167,7 @@ loadTemplate name logIt = do
167167
168168-- | Apply and unpack a template into a directory.
169169applyTemplate
170- :: (MonadIO m , MonadThrow m , MonadReader r m , HasConfig r , MonadLogger m )
170+ :: (MonadIO m , MonadThrow m , MonadCatch m , MonadReader r m , HasConfig r , MonadLogger m )
171171 => PackageName
172172 -> TemplateName
173173 -> Map Text Text
@@ -189,9 +189,17 @@ applyTemplate project template nonceParams dir templateText = do
189189 unless (S. null missingKeys)
190190 ($ logInfo (T. pack (show (MissingParameters project template missingKeys (configUserConfigPath config)))))
191191 files :: Map FilePath LB. ByteString <-
192- execWriterT $
193- yield (T. encodeUtf8 (LT. toStrict applied)) $$
194- unpackTemplate receiveMem id
192+ catch (execWriterT $
193+ yield (T. encodeUtf8 (LT. toStrict applied)) $$
194+ unpackTemplate receiveMem id
195+ )
196+ (\ (e :: ProjectTemplateException ) ->
197+ throwM (InvalidTemplate template (show e)))
198+ when (M. null files) $
199+ throwM (InvalidTemplate template " Template does not contain any files" )
200+ unless (any (" .cabal" `isSuffixOf` ) . M. keys $ files) $
201+ throwM (InvalidTemplate template " Template does not contain a .cabal\
202+ \ file" )
195203 liftM
196204 M. fromList
197205 (mapM
@@ -319,6 +327,7 @@ data NewException
319327 | BadTemplatesJSON ! String ! LB. ByteString
320328 | AlreadyExists ! (Path Abs Dir )
321329 | MissingParameters ! PackageName ! TemplateName ! (Set String ) ! (Path Abs File )
330+ | InvalidTemplate ! TemplateName ! String
322331 deriving (Typeable )
323332
324333instance Exception NewException
@@ -373,3 +382,7 @@ instance Show NewException where
373382 (\ key ->
374383 " -p \" " <> key <> " :value\" " )
375384 (S. toList missingKeys))]
385+ show (InvalidTemplate name why) =
386+ " The template \" " <> T. unpack (templateName name) <>
387+ " \" is invalid and could not be used. " <>
388+ " The error was: \" " <> why <> " \" "
0 commit comments