on master help sign in
Fix root directory in directory-wise metadata and beautify code
commita6ae4eb99dd5f9957adc3b5fe4011e69b9681e4c authorAlexey Kreshchuk <akrsch@gmail.com> dateTue 15 Oct 2013, 03:59 (13 years ago) parente71bbd9
1 file changed+14−20
src/Hakyll/Core/Provider/Metadata.hs+14−20
src/Hakyll/Core/Provider/Metadata.hs+14−20
@@ -142,26 +142,20 @@ page = do
142142--------------------------------------------------------------------------------
143143-- | Load directory-wise metadata
144144loadGlobalMetadata :: Provider -> FilePath -> IO (M.Map String String)
145−loadGlobalMetadata p fp = do
146− let dir = takeDirectory fp
147− liftM M.fromList $ loadgm dir
148− where
149− loadgm :: FilePath -> IO [(String, String)]
150− loadgm dir | dir == providerDirectory p = return []
151− | otherwise = do
152− let mfp = combine dir "metadata"
153− md <- if M.member (fromFilePath mfp) (providerFiles p)
154− then loadOne mfp dir
155− else return []
156− others <- loadgm (takeDirectory dir)
157− return $ others ++ md
158− loadOne mfp dir = do
159− contents <- IO.readFile $ resourceFilePath p $ fromFilePath mfp
160− return $ case P.parse namedMetadata mfp contents of
161− Left err -> error (show err)
162− Right mds -> findMetadata mds dir
163− findMetadata mds dir =
164− concatMap snd $ filter (flip matches (fromFilePath fp) . fromGlob . combine dir . fst) mds
145+loadGlobalMetadata p fp = liftM M.fromList $ loadgm $ takeDirectory fp where
146+ loadgm :: FilePath -> IO [(String, String)]
147+ loadgm dir | dir == "." = return []
148+ | otherwise = do
149+ let mfp = fromFilePath $ combine dir "metadata"
150+ md <- if resourceExists p mfp then loadOne mfp dir else return []
151+ others <- loadgm (takeDirectory dir)
152+ return $ others ++ md
153+ loadOne mfp dir =
154+ let path = resourceFilePath p mfp
155+ -- TODO: It might be better to print warning and continue
156+ in either (error.show) (findMetadata dir) . P.parse namedMetadata path <$> readFile path
157+ findMetadata dir =
158+ concatMap snd . filter (flip matches (fromFilePath fp) . fromGlob . combine dir . fst)
165159
166160namedMetadata :: Parser [(String, [(String, String)])]
167161namedMetadata = P.many namedMetadataBlock