on master help sign in
Resource invariant: / as path separator
7052768Jasper Van der Jeugt
src/Hakyll/Core/Compiler.hs+5−5
@@ -211,12 +211,12 @@ getResourceLBS = getResourceWith resourceLBS
211--
211--
212getResourceWith :: (ResourceProvider -> Resource -> IO a)
212getResourceWith :: (ResourceProvider -> Resource -> IO a)
213 -> Compiler Resource a
213 -> Compiler Resource a
214−getResourceWith reader = fromJob $ \resource -> CompilerM $ do
214+getResourceWith reader = fromJob $ \r -> CompilerM $ do
215− let identifier = unResource resource
215+ let filePath = unResource r
216 provider <- compilerResourceProvider <$> ask
216 provider <- compilerResourceProvider <$> ask
217− if resourceExists provider resource
217+ if resourceExists provider r
218− then liftIO $ reader provider resource
218+ then liftIO $ reader provider r
219− else throwError $ error' identifier
219+ else throwError $ error' filePath
220 where
220 where
221 error' id' = "Hakyll.Core.Compiler.getResourceWith: resource "
221 error' id' = "Hakyll.Core.Compiler.getResourceWith: resource "
222 ++ show id' ++ " not found"
222 ++ show id' ++ " not found"
src/Hakyll/Core/Resource.hs+10−3
@@ -1,7 +1,9 @@
1-- | Module exporting the simple 'Resource' type
1-- | Module exporting the simple 'Resource' type
2--
2--
3module Hakyll.Core.Resource
3module Hakyll.Core.Resource
4− ( Resource (..)
4+ ( Resource
5+ , unResource
6+ , resource
5 , fromIdentifier
7 , fromIdentifier
6 , toIdentifier
8 , toIdentifier
7 ) where
9 ) where
@@ -10,8 +12,13 @@ import Hakyll.Core.Identifier
10
12
11-- | A resource
13-- | A resource
12--
14--
13−newtype Resource = Resource {unResource :: String}
15+newtype Resource = Resource {unResource :: FilePath}
14− deriving (Eq, Show, Ord)
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
15
22
16-- | Create a resource from an identifier
23-- | Create a resource from an identifier
17--
24--
src/Hakyll/Core/Resource/Provider.hs+8−8
@@ -68,17 +68,17 @@ resourceDigest provider = fmap MD5.hashlazy . resourceLBS provider
68-- | Check if a resource was modified
68-- | Check if a resource was modified
69--
69--
70resourceModified :: ResourceProvider -> Store -> Resource -> IO Bool
70resourceModified :: ResourceProvider -> Store -> Resource -> IO Bool
71−resourceModified provider store resource = do
71+resourceModified provider store r = do
72 cache <- readMVar mvar
72 cache <- readMVar mvar
73− case M.lookup resource cache of
73+ case M.lookup r cache of
74 -- Already in the cache
74 -- Already in the cache
75 Just m -> return m
75 Just m -> return m
76 -- Not yet in the cache, check digests (if it exists)
76 -- Not yet in the cache, check digests (if it exists)
77 Nothing -> do
77 Nothing -> do
78− m <- if resourceExists provider resource
78+ m <- if resourceExists provider r
79− then digestModified provider store resource
79+ then digestModified provider store r
80 else return False
80 else return False
81− modifyMVar_ mvar (return . M.insert resource m)
81+ modifyMVar_ mvar (return . M.insert r m)
82 return m
82 return m
83 where
83 where
84 mvar = resourceModifiedCache provider
84 mvar = resourceModifiedCache provider
@@ -86,11 +86,11 @@ resourceModified provider store resource = do
86-- | Check if a resource digest was modified
86-- | Check if a resource digest was modified
87--
87--
88digestModified :: ResourceProvider -> Store -> Resource -> IO Bool
88digestModified :: ResourceProvider -> Store -> Resource -> IO Bool
89−digestModified provider store resource = do
89+digestModified provider store r = do
90 -- Get the latest seen digest from the store
90 -- Get the latest seen digest from the store
91 lastDigest <- storeGet store itemName identifier
91 lastDigest <- storeGet store itemName identifier
92 -- Calculate the digest for the resource
92 -- Calculate the digest for the resource
93− newDigest <- resourceDigest provider resource
93+ newDigest <- resourceDigest provider r
94 -- Check digests
94 -- Check digests
95 if Found newDigest == lastDigest
95 if Found newDigest == lastDigest
96 -- All is fine, not modified
96 -- All is fine, not modified
@@ -99,5 +99,5 @@ digestModified provider store resource = do
99 else do storeSet store itemName identifier newDigest
99 else do storeSet store itemName identifier newDigest
100 return True
100 return True
101 where
101 where
102− identifier = toIdentifier resource
102+ identifier = toIdentifier r
103 itemName = "Hakyll.Core.ResourceProvider.digestModified"
103 itemName = "Hakyll.Core.ResourceProvider.digestModified"
src/Hakyll/Core/Resource/Provider/Dummy.hs+1−1
@@ -19,7 +19,7 @@ import Hakyll.Core.Resource.Provider
19--
19--
20dummyResourceProvider :: Map String ByteString -> IO ResourceProvider
20dummyResourceProvider :: Map String ByteString -> IO ResourceProvider
21dummyResourceProvider vfs = makeResourceProvider
21dummyResourceProvider vfs = makeResourceProvider
22− (map Resource (M.keys vfs))
22+ (map resource (M.keys vfs))
23 (return . TL.unpack . TL.decodeUtf8 . (vfs M.!) . unResource)
23 (return . TL.unpack . TL.decodeUtf8 . (vfs M.!) . unResource)
24 (return . (vfs M.!) . unResource)
24 (return . (vfs M.!) . unResource)
25 (const getCurrentTime)
25 (const getCurrentTime)
src/Hakyll/Core/Resource/Provider/File.hs+3−3
@@ -22,13 +22,13 @@ import Hakyll.Core.Configuration
22fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider
22fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider
23fileResourceProvider configuration = do
23fileResourceProvider configuration = do
24 -- Retrieve a list of paths
24 -- Retrieve a list of paths
25− list <- map Resource . filter (not . shouldIgnoreFile configuration) <$>
25+ list <- map resource . filter (not . shouldIgnoreFile configuration) <$>
26 getRecursiveContents False "."
26 getRecursiveContents False "."
27 makeResourceProvider list (readFile . unResource)
27 makeResourceProvider list (readFile . unResource)
28 (LB.readFile . unResource)
28 (LB.readFile . unResource)
29− mtime
29+ (mtime . unResource)
30 where
30 where
31− mtime (Resource r) = do
31+ mtime r = do
32 ct <- toCalendarTime =<< getModificationTime r
32 ct <- toCalendarTime =<< getModificationTime r
33 let str = formatCalendarTime defaultTimeLocale "%s" ct
33 let str = formatCalendarTime defaultTimeLocale "%s" ct
34 return $ readTime defaultTimeLocale "%s" str
34 return $ readTime defaultTimeLocale "%s" str