summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJasper Van der Jeugt <jaspervdj@gmail.com>2013-05-04 06:14:19 -0700
committerJasper Van der Jeugt <jaspervdj@gmail.com>2013-05-04 06:14:19 -0700
commit3ac3037ec9f93a7bd368e4a135ce65d7590c7f37 (patch)
treebfee8395df134a5263e6512a196bb42914f90948 /src
parent4100083709a894225717dbe3068f73057e908dd6 (diff)
parentf4ee3e7fcb0817098643c6b34cab92466584680a (diff)
downloadhakyll-3ac3037ec9f93a7bd368e4a135ce65d7590c7f37.tar.gz
Merge pull request #142 from justnoxx/master
Added isMember function.
Diffstat (limited to 'src')
-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