on master help sign in
Revert "Fix root directory in directory-wise metadata and beautify code"
bc1cfc8Jasper Van der Jeugt
src/Hakyll/Core/Provider/Metadata.hs+20−14
@@ -142,20 +142,26 @@ page = do
142--------------------------------------------------------------------------------
142--------------------------------------------------------------------------------
143-- | Load directory-wise metadata
143-- | Load directory-wise metadata
144loadGlobalMetadata :: Provider -> FilePath -> IO (M.Map String String)
144loadGlobalMetadata :: Provider -> FilePath -> IO (M.Map String String)
145−loadGlobalMetadata p fp = liftM M.fromList $ loadgm $ takeDirectory fp where
145+loadGlobalMetadata p fp = do
146+ let dir = takeDirectory fp
147+ liftM M.fromList $ loadgm dir
148+ where
146− loadgm :: FilePath -> IO [(String, String)]
149+ loadgm :: FilePath -> IO [(String, String)]
147− loadgm dir | dir == "." = return []
150+ loadgm dir | dir == providerDirectory p = return []
148− | otherwise = do
151+ | otherwise = do
149− let mfp = fromFilePath $ combine dir "metadata"
152+ let mfp = combine dir "metadata"
153+ md <- if M.member (fromFilePath mfp) (providerFiles p)
150− md <- if resourceExists p mfp then loadOne mfp dir else return []
154+ then loadOne mfp dir
155+ else return []
151− others <- loadgm (takeDirectory dir)
156+ others <- loadgm (takeDirectory dir)
152− return $ others ++ md
157+ return $ others ++ md
153− loadOne mfp dir =
158+ loadOne mfp dir = do
154− let path = resourceFilePath p mfp
159+ contents <- IO.readFile $ resourceFilePath p $ fromFilePath mfp
155− -- TODO: It might be better to print warning and continue
160+ return $ case P.parse namedMetadata mfp contents of
156− in either (error.show) (findMetadata dir) . P.parse namedMetadata path <$> readFile path
161+ Left err -> error (show err)
162+ Right mds -> findMetadata mds dir
157− findMetadata dir =
163+ findMetadata mds dir =
158− concatMap snd . filter (flip matches (fromFilePath fp) . fromGlob . combine dir . fst)
164+ concatMap snd $ filter (flip matches (fromFilePath fp) . fromGlob . combine dir . fst) mds
159
165
160namedMetadata :: Parser [(String, [(String, String)])]
166namedMetadata :: Parser [(String, [(String, String)])]
161namedMetadata = liftA2 (:) (namedMetadataBlock False) $ P.many $ namedMetadataBlock True
167namedMetadata = liftA2 (:) (namedMetadataBlock False) $ P.many $ namedMetadataBlock True