on master help sign in
Add wasModified method
70c7363Jasper Van der Jeugt
src/Hakyll/Core/Store.hs+20
@@ -5,6 +5,7 @@ module Hakyll.Core.Store
5 , makeStore
5 , makeStore
6 , storeSet
6 , storeSet
7 , storeGet
7 , storeGet
8+ , wasModified
8 ) where
9 ) where
9
10
10import Control.Applicative ((<$>))
11import Control.Applicative ((<$>))
@@ -15,6 +16,7 @@ import Data.Binary (Binary, encodeFile, decodeFile)
15
16
16import Hakyll.Core.Identifier
17import Hakyll.Core.Identifier
17import Hakyll.Core.Util.File
18import Hakyll.Core.Util.File
19+import Hakyll.Core.ResourceProvider
18
20
19-- | Data structure used for the store
21-- | Data structure used for the store
20--
22--
@@ -51,3 +53,21 @@ storeGet store name identifier = do
51 else return Nothing
53 else return Nothing
52 where
54 where
53 path = makePath store name identifier
55 path = makePath store name identifier
56+
57+-- | Check if a resource was modified
58+--
59+wasModified :: Store -> ResourceProvider -> Identifier -> IO Bool
60+wasModified store provider identifier = do
61+ -- Get the latest seen digest from the store
62+ lastDigest <- storeGet store itemName identifier
63+ -- Calculate the digest for the resource
64+ newDigest <- resourceDigest provider identifier
65+ -- Check digests
66+ if Just newDigest == lastDigest
67+ -- All is fine, not modified
68+ then return False
69+ -- Resource modified; store new digest
70+ else do storeSet store itemName identifier newDigest
71+ return True
72+ where
73+ itemName = "Hakyll.Core.Store.wasModified"