From 7052768e4bc490d63503f6b7edf7a84bcccdf968 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Fri, 18 May 2012 18:24:57 +0200 Subject: Resource invariant: / as path separator --- src/Hakyll/Core/Compiler.hs | 10 +++++----- src/Hakyll/Core/Resource.hs | 13 ++++++++++--- src/Hakyll/Core/Resource/Provider.hs | 16 ++++++++-------- src/Hakyll/Core/Resource/Provider/Dummy.hs | 2 +- src/Hakyll/Core/Resource/Provider/File.hs | 6 +++--- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/Hakyll/Core/Compiler.hs b/src/Hakyll/Core/Compiler.hs index 069c873..99c7d97 100644 --- a/src/Hakyll/Core/Compiler.hs +++ b/src/Hakyll/Core/Compiler.hs @@ -211,12 +211,12 @@ getResourceLBS = getResourceWith resourceLBS -- getResourceWith :: (ResourceProvider -> Resource -> IO a) -> Compiler Resource a -getResourceWith reader = fromJob $ \resource -> CompilerM $ do - let identifier = unResource resource +getResourceWith reader = fromJob $ \r -> CompilerM $ do + let filePath = unResource r provider <- compilerResourceProvider <$> ask - if resourceExists provider resource - then liftIO $ reader provider resource - else throwError $ error' identifier + if resourceExists provider r + then liftIO $ reader provider r + else throwError $ error' filePath where error' id' = "Hakyll.Core.Compiler.getResourceWith: resource " ++ show id' ++ " not found" diff --git a/src/Hakyll/Core/Resource.hs b/src/Hakyll/Core/Resource.hs index ce5da81..566bb26 100644 --- a/src/Hakyll/Core/Resource.hs +++ b/src/Hakyll/Core/Resource.hs @@ -1,7 +1,9 @@ -- | Module exporting the simple 'Resource' type -- module Hakyll.Core.Resource - ( Resource (..) + ( Resource + , unResource + , resource , fromIdentifier , toIdentifier ) where @@ -10,8 +12,13 @@ import Hakyll.Core.Identifier -- | A resource -- -newtype Resource = Resource {unResource :: String} - deriving (Eq, Show, Ord) +newtype Resource = Resource {unResource :: FilePath} + deriving (Eq, Show, Ord) + +-- | Smart constructor to ensure we have @/@ as path separator +-- +resource :: FilePath -> Resource +resource = fromIdentifier . parseIdentifier -- | Create a resource from an identifier -- diff --git a/src/Hakyll/Core/Resource/Provider.hs b/src/Hakyll/Core/Resource/Provider.hs index c3bc9ab..d91c374 100644 --- a/src/Hakyll/Core/Resource/Provider.hs +++ b/src/Hakyll/Core/Resource/Provider.hs @@ -68,17 +68,17 @@ resourceDigest provider = fmap MD5.hashlazy . resourceLBS provider -- | Check if a resource was modified -- resourceModified :: ResourceProvider -> Store -> Resource -> IO Bool -resourceModified provider store resource = do +resourceModified provider store r = do cache <- readMVar mvar - case M.lookup resource cache of + case M.lookup r cache of -- Already in the cache Just m -> return m -- Not yet in the cache, check digests (if it exists) Nothing -> do - m <- if resourceExists provider resource - then digestModified provider store resource + m <- if resourceExists provider r + then digestModified provider store r else return False - modifyMVar_ mvar (return . M.insert resource m) + modifyMVar_ mvar (return . M.insert r m) return m where mvar = resourceModifiedCache provider @@ -86,11 +86,11 @@ resourceModified provider store resource = do -- | Check if a resource digest was modified -- digestModified :: ResourceProvider -> Store -> Resource -> IO Bool -digestModified provider store resource = do +digestModified provider store r = do -- Get the latest seen digest from the store lastDigest <- storeGet store itemName identifier -- Calculate the digest for the resource - newDigest <- resourceDigest provider resource + newDigest <- resourceDigest provider r -- Check digests if Found newDigest == lastDigest -- All is fine, not modified @@ -99,5 +99,5 @@ digestModified provider store resource = do else do storeSet store itemName identifier newDigest return True where - identifier = toIdentifier resource + identifier = toIdentifier r itemName = "Hakyll.Core.ResourceProvider.digestModified" diff --git a/src/Hakyll/Core/Resource/Provider/Dummy.hs b/src/Hakyll/Core/Resource/Provider/Dummy.hs index dad7b0b..548f845 100644 --- a/src/Hakyll/Core/Resource/Provider/Dummy.hs +++ b/src/Hakyll/Core/Resource/Provider/Dummy.hs @@ -19,7 +19,7 @@ import Hakyll.Core.Resource.Provider -- dummyResourceProvider :: Map String ByteString -> IO ResourceProvider dummyResourceProvider vfs = makeResourceProvider - (map Resource (M.keys vfs)) + (map resource (M.keys vfs)) (return . TL.unpack . TL.decodeUtf8 . (vfs M.!) . unResource) (return . (vfs M.!) . unResource) (const getCurrentTime) diff --git a/src/Hakyll/Core/Resource/Provider/File.hs b/src/Hakyll/Core/Resource/Provider/File.hs index abb7ebe..b2172b8 100644 --- a/src/Hakyll/Core/Resource/Provider/File.hs +++ b/src/Hakyll/Core/Resource/Provider/File.hs @@ -22,13 +22,13 @@ import Hakyll.Core.Configuration fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider fileResourceProvider configuration = do -- Retrieve a list of paths - list <- map Resource . filter (not . shouldIgnoreFile configuration) <$> + list <- map resource . filter (not . shouldIgnoreFile configuration) <$> getRecursiveContents False "." makeResourceProvider list (readFile . unResource) (LB.readFile . unResource) - mtime + (mtime . unResource) where - mtime (Resource r) = do + mtime r = do ct <- toCalendarTime =<< getModificationTime r let str = formatCalendarTime defaultTimeLocale "%s" ct return $ readTime defaultTimeLocale "%s" str -- cgit v1.2.3