🐙 Templated web page generator for your git repositories
git clone https://github.com/m-col/gitja
Files | Refs | Readme | License

Commit 515e729ceeb5bbd0326ea2dd38a33b3df4db939c
Parent: 99e5fa538c92925dc31ba43b7596fb99e6a8e7e5
Author: mcol <mcol@posteo.net>
Date: 2021-09-24 22:55:06 +0100
Committer: mcol <mcol@posteo.net>
Committed: 2021-09-24 22:55:06 +0100

Don't print errors twice when failing to load index template

src/Templates.hs Modified

@@ -10,7 +10,7 @@
 
 import Control.Monad (filterM, (<=<))
 import Data.Char (toLower)
-import Data.Either (rights)
+import Data.Either (rights, either)
 import Data.List (isSuffixOf)
 import Data.Text (unpack, Text)
 import qualified Data.HashMap.Strict as HashMap
@@ -18,7 +18,7 @@
 import System.FilePath ((</>))
 import System.IO.Error (tryIOError)
 import qualified Text.Ginger.AST as G
-import Text.Ginger.Parse (SourcePos, parseGingerFile)
+import Text.Ginger.Parse (SourcePos, parseGingerFile, peErrorMessage)
 import Text.Ginger.GVal (GVal)
 import Text.Ginger.Html (htmlSource, Html)
 import Text.Ginger.Run (easyRenderM, Run, RuntimeError)
@@ -38,8 +38,9 @@
 loadTemplates :: Config -> IO [Template]
 loadTemplates config = do
     files <- getFiles config
-    parsed <- sequence $ parseGingerFile includeResolver <$> files
-    return $ Template <$> files <*> rights parsed
+    let files' = filter ((/=) $ indexTemplate config) files
+    parsed <- sequence $ parseGingerFile includeResolver <$> files'
+    return $ Template <$> files' <*> rights parsed
 
 {-
 This takes the session's `Config` and maybe returns a loaded template for the
@@ -49,7 +50,7 @@
 loadIndexTemplate config = parseGingerFile includeResolver file >>= \case
     Right parsed -> return . Just . Template file $ parsed
     Left err -> do
-        print err
+        print . peErrorMessage $ err
         return Nothing
   where
     file = indexTemplate config
@@ -61,11 +62,7 @@
 includes.
 -}
 includeResolver :: FilePath -> IO (Maybe String)
-includeResolver path = tryIOError (readFile path) >>= \case
-    Right contents -> return $ Just contents
-    Left err -> do
-        print err
-        return Nothing
+includeResolver path = return . either (const Nothing) Just =<< tryIOError (readFile path)
 
 {-
 This is used to filter files in the template directory so that we only try to load