1--------------------------------------------------------------------------------
2module Hakyll.Core.Provider.Internal
8 , resourceMetadataResource
15--------------------------------------------------------------------------------
16import Control.Applicative ((<$>))
17import qualified Data.ByteString.Lazy as BL
20import qualified Data.Map as M
22import qualified Data.Set as S
23import System.FilePath (addExtension)
26--------------------------------------------------------------------------------
27import Hakyll.Core.Store
28import Hakyll.Core.Util.File
29import Hakyll.Core.Identifier
32--------------------------------------------------------------------------------
33-- | Responsible for retrieving and listing resources
34data Provider = Provider
35 { -- | A list of all files found
36 providerSet :: Set Identifier
37 , -- | Cache keeping track of modified files
38 providerModifiedCache :: IORef (Map Identifier Bool)
39 , -- | Underlying persistent store for caching
40 providerStore :: Store
44--------------------------------------------------------------------------------
45-- | Create a resource provider
46newProvider :: Store -- ^ Store to use
47 -> (FilePath -> Bool) -- ^ Should we ignore this file?
48 -> FilePath -- ^ Search directory
49 -> IO Provider -- ^ Resulting provider
50newProvider store ignore directory = do
51 list <- map fromFilePath . filter (not . ignore) <$>
52 getRecursiveContents False directory
53 cache <- newIORef M.empty
54 return $ Provider (S.fromList list) cache store
57--------------------------------------------------------------------------------
58resourceList :: Provider -> [Identifier]
59resourceList = S.toList . providerSet
62--------------------------------------------------------------------------------
63-- | Check if a given resource exists
64resourceExists :: Provider -> Identifier -> Bool
65resourceExists provider =
66 (`S.member` providerSet provider) . setVersion Nothing
69--------------------------------------------------------------------------------
70-- | Each resource may have an associated metadata resource (with a @.metadata@
72resourceMetadataResource :: Identifier -> Identifier
73resourceMetadataResource =
74 fromFilePath . flip addExtension "metadata" . toFilePath
77--------------------------------------------------------------------------------
78-- | Get the raw body of a resource as string
79resourceString :: Identifier -> IO String
80resourceString = readFile . toFilePath
83--------------------------------------------------------------------------------
84-- | Get the raw body of a resource of a lazy bytestring
85resourceLBS :: Identifier -> IO BL.ByteString
86resourceLBS = BL.readFile . toFilePath
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list