summaryrefslogtreecommitdiff
path: root/src/Hakyll
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hakyll')
-rw-r--r--src/Hakyll/Core/Provider/MetadataCache.hs10
-rw-r--r--src/Hakyll/Core/Store.hs21
2 files changed, 24 insertions, 7 deletions
diff --git a/src/Hakyll/Core/Provider/MetadataCache.hs b/src/Hakyll/Core/Provider/MetadataCache.hs
index 077bad2..031960c 100644
--- a/src/Hakyll/Core/Provider/MetadataCache.hs
+++ b/src/Hakyll/Core/Provider/MetadataCache.hs
@@ -8,7 +8,7 @@ module Hakyll.Core.Provider.MetadataCache
--------------------------------------------------------------------------------
import qualified Data.Map as M
-
+import Control.Monad (unless)
--------------------------------------------------------------------------------
import Hakyll.Core.Identifier
@@ -49,12 +49,8 @@ resourceInvalidateMetadataCache p r = do
--------------------------------------------------------------------------------
load :: Provider -> Identifier -> IO ()
load p r = do
- mmd <- Store.get store mdk :: IO (Store.Result Metadata)
- case mmd of
- -- Already loaded
- Store.Found _ -> return ()
- -- Not yet loaded
- _ -> do
+ mmof <- Store.isMember store mdk
+ unless mmof $ do
(md, body) <- loadMetadata p r
Store.set store mdk md
Store.set store bk body
diff --git a/src/Hakyll/Core/Store.hs b/src/Hakyll/Core/Store.hs
index 1208c84..b2c61a0 100644
--- a/src/Hakyll/Core/Store.hs
+++ b/src/Hakyll/Core/Store.hs
@@ -9,6 +9,7 @@ module Hakyll.Core.Store
, new
, set
, get
+ , isMember
, delete
, hash
) where
@@ -101,6 +102,16 @@ cacheLookup (Store _ (Just lru)) key = do
--------------------------------------------------------------------------------
+cacheIsMember :: Store -> String -> IO Bool
+cacheIsMember (Store _ Nothing) _ = return False
+cacheIsMember (Store _ (Just lru)) key = do
+ res <- Lru.lookup key lru
+ case res of
+ Nothing -> return False
+ _ -> return True
+
+
+--------------------------------------------------------------------------------
-- | Auxiliary: delete an item from the in-memory cache
cacheDelete :: Store -> String -> IO ()
cacheDelete (Store _ Nothing) _ = return ()
@@ -152,6 +163,16 @@ get store identifier = do
--------------------------------------------------------------------------------
+-- | Strict function
+isMember :: Store -> [String] -> IO Bool
+isMember store identifier = do
+ inCache <- cacheIsMember store key
+ if inCache then return True else doesFileExist path
+ where
+ key = hash identifier
+ path = storeDirectory store </> key
+
+--------------------------------------------------------------------------------
-- | Delete an item
delete :: Store -> [String] -> IO ()
delete store identifier = do