on master help sign in
Resource invariant: / as path separator
commit7052768e4bc490d63503f6b7edf7a84bcccdf968 authorJasper Van der Jeugt <m@jaspervdj.be> dateFri 18 May 2012, 18:24 (14 years ago) parent264aeed
5 files changed+27−20
src/Hakyll/Core/Compiler.hs+5−5 src/Hakyll/Core/Resource.hs+10−3 src/Hakyll/Core/Resource/Provider.hs+8−8 src/Hakyll/Core/Resource/Provider/Dummy.hs+1−1 src/Hakyll/Core/Resource/Provider/File.hs+3−3
src/Hakyll/Core/Compiler.hs+5−5
@@ -211,12 +211,12 @@ getResourceLBS = getResourceWith resourceLBS
211211--
212212getResourceWith :: (ResourceProvider -> Resource -> IO a)
213213 -> Compiler Resource a
214−getResourceWith reader = fromJob $ \resource -> CompilerM $ do
215− let identifier = unResource resource
214+getResourceWith reader = fromJob $ \r -> CompilerM $ do
215+ let filePath = unResource r
216216 provider <- compilerResourceProvider <$> ask
217− if resourceExists provider resource
218− then liftIO $ reader provider resource
219− else throwError $ error' identifier
217+ if resourceExists provider r
218+ then liftIO $ reader provider r
219+ else throwError $ error' filePath
220220 where
221221 error' id' = "Hakyll.Core.Compiler.getResourceWith: resource "
222222 ++ show id' ++ " not found"
src/Hakyll/Core/Resource.hs+10−3
@@ -1,7 +1,9 @@
11-- | Module exporting the simple 'Resource' type
22--
33module Hakyll.Core.Resource
4− ( Resource (..)
4+ ( Resource
5+ , unResource
6+ , resource
57 , fromIdentifier
68 , toIdentifier
79 ) where
@@ -10,8 +12,13 @@ import Hakyll.Core.Identifier
1012
1113-- | A resource
1214--
13−newtype Resource = Resource {unResource :: String}
14− deriving (Eq, Show, Ord)
15+newtype Resource = Resource {unResource :: FilePath}
16+ deriving (Eq, Show, Ord)
17+
18+-- | Smart constructor to ensure we have @/@ as path separator
19+--
20+resource :: FilePath -> Resource
21+resource = fromIdentifier . parseIdentifier
1522
1623-- | Create a resource from an identifier
1724--
src/Hakyll/Core/Resource/Provider.hs+8−8
@@ -68,17 +68,17 @@ resourceDigest provider = fmap MD5.hashlazy . resourceLBS provider
6868-- | Check if a resource was modified
6969--
7070resourceModified :: ResourceProvider -> Store -> Resource -> IO Bool
71−resourceModified provider store resource = do
71+resourceModified provider store r = do
7272 cache <- readMVar mvar
73− case M.lookup resource cache of
73+ case M.lookup r cache of
7474 -- Already in the cache
7575 Just m -> return m
7676 -- Not yet in the cache, check digests (if it exists)
7777 Nothing -> do
78− m <- if resourceExists provider resource
79− then digestModified provider store resource
78+ m <- if resourceExists provider r
79+ then digestModified provider store r
8080 else return False
81− modifyMVar_ mvar (return . M.insert resource m)
81+ modifyMVar_ mvar (return . M.insert r m)
8282 return m
8383 where
8484 mvar = resourceModifiedCache provider
@@ -86,11 +86,11 @@ resourceModified provider store resource = do
8686-- | Check if a resource digest was modified
8787--
8888digestModified :: ResourceProvider -> Store -> Resource -> IO Bool
89−digestModified provider store resource = do
89+digestModified provider store r = do
9090 -- Get the latest seen digest from the store
9191 lastDigest <- storeGet store itemName identifier
9292 -- Calculate the digest for the resource
93− newDigest <- resourceDigest provider resource
93+ newDigest <- resourceDigest provider r
9494 -- Check digests
9595 if Found newDigest == lastDigest
9696 -- All is fine, not modified
@@ -99,5 +99,5 @@ digestModified provider store resource = do
9999 else do storeSet store itemName identifier newDigest
100100 return True
101101 where
102− identifier = toIdentifier resource
102+ identifier = toIdentifier r
103103 itemName = "Hakyll.Core.ResourceProvider.digestModified"
src/Hakyll/Core/Resource/Provider/Dummy.hs+1−1
@@ -19,7 +19,7 @@ import Hakyll.Core.Resource.Provider
1919--
2020dummyResourceProvider :: Map String ByteString -> IO ResourceProvider
2121dummyResourceProvider vfs = makeResourceProvider
22− (map Resource (M.keys vfs))
22+ (map resource (M.keys vfs))
2323 (return . TL.unpack . TL.decodeUtf8 . (vfs M.!) . unResource)
2424 (return . (vfs M.!) . unResource)
2525 (const getCurrentTime)
src/Hakyll/Core/Resource/Provider/File.hs+3−3
@@ -22,13 +22,13 @@ import Hakyll.Core.Configuration
2222fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider
2323fileResourceProvider configuration = do
2424 -- Retrieve a list of paths
25− list <- map Resource . filter (not . shouldIgnoreFile configuration) <$>
25+ list <- map resource . filter (not . shouldIgnoreFile configuration) <$>
2626 getRecursiveContents False "."
2727 makeResourceProvider list (readFile . unResource)
2828 (LB.readFile . unResource)
29− mtime
29+ (mtime . unResource)
3030 where
31− mtime (Resource r) = do
31+ mtime r = do
3232 ct <- toCalendarTime =<< getModificationTime r
3333 let str = formatCalendarTime defaultTimeLocale "%s" ct
3434 return $ readTime defaultTimeLocale "%s" str