diff options
| author | Alexey Kreshchuk <akrsch@gmail.com> | 2013-10-16 01:39:04 +0400 |
|---|---|---|
| committer | Alexey Kreshchuk <akrsch@gmail.com> | 2013-10-16 01:39:04 +0400 |
| commit | 712ffa39b5857fdc5cdae1db38a177267a430b11 (patch) | |
| tree | b4b5f7c46f769dc176932894bbafe0878da99e3a /src/Hakyll/Core/Provider | |
| parent | a6ae4eb99dd5f9957adc3b5fe4011e69b9681e4c (diff) | |
| download | hakyll-712ffa39b5857fdc5cdae1db38a177267a430b11.tar.gz | |
Track metadata dependencies
I had to prepend some Rules to global Rules set. This might be possible
to replaced by a correct Store.set call.
I also had to prepend some Compile rules.
Diffstat (limited to 'src/Hakyll/Core/Provider')
| -rw-r--r-- | src/Hakyll/Core/Provider/Metadata.hs | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/Hakyll/Core/Provider/Metadata.hs b/src/Hakyll/Core/Provider/Metadata.hs index 8f39f22..4331861 100644 --- a/src/Hakyll/Core/Provider/Metadata.hs +++ b/src/Hakyll/Core/Provider/Metadata.hs @@ -44,7 +44,7 @@ loadMetadata p identifier = do Nothing -> return M.empty Just mi' -> loadMetadataFile $ resourceFilePath p mi' - gmd <- loadGlobalMetadata p $ toFilePath identifier + gmd <- loadGlobalMetadata p identifier return (M.unions [md, emd, gmd], body) where @@ -141,21 +141,17 @@ page = do -------------------------------------------------------------------------------- -- | Load directory-wise metadata -loadGlobalMetadata :: Provider -> FilePath -> IO (M.Map String String) -loadGlobalMetadata p fp = liftM M.fromList $ loadgm $ takeDirectory fp where - loadgm :: FilePath -> IO [(String, String)] - loadgm dir | dir == "." = return [] - | otherwise = do - let mfp = fromFilePath $ combine dir "metadata" - md <- if resourceExists p mfp then loadOne mfp dir else return [] - others <- loadgm (takeDirectory dir) - return $ others ++ md - loadOne mfp dir = +loadGlobalMetadata :: Provider -> Identifier -> IO Metadata +loadGlobalMetadata p fp = liftM M.fromList $ loadgm fp where + loadgm :: Identifier -> IO [(String, String)] + loadgm = liftM concat . mapM loadOne . reverse . filter (resourceExists p) . metadataFiles + loadOne mfp = let path = resourceFilePath p mfp + dir = takeDirectory $ toFilePath mfp -- TODO: It might be better to print warning and continue in either (error.show) (findMetadata dir) . P.parse namedMetadata path <$> readFile path findMetadata dir = - concatMap snd . filter (flip matches (fromFilePath fp) . fromGlob . combine dir . fst) + concatMap snd . filter (flip matches fp . fromGlob . combine dir . fst) namedMetadata :: Parser [(String, [(String, String)])] namedMetadata = P.many namedMetadataBlock |
