on master help sign in
Preview/INotify now works
commitf04efbad3ed6f5cbc215f8aa72b1bd0203712768 authorJasper Van der Jeugt <jaspervdj@gmail.com> dateSat 19 Feb 2011, 17:04 (16 years ago) parentb89aad6
5 files changed+37−9
src/Hakyll/Core/Configuration.hs+24−1 src/Hakyll/Core/ResourceProvider/FileResourceProvider.hs+5−3 src/Hakyll/Core/Run.hs+1−1 src/Hakyll/Main.hs+3−1 src/Hakyll/Web/Preview/INotify.hs+4−3
src/Hakyll/Core/Configuration.hs+24−1
@@ -5,12 +5,26 @@ module Hakyll.Core.Configuration
55 , defaultHakyllConfiguration
66 ) where
77
8+import System.FilePath (takeFileName)
9+import Data.List (isPrefixOf, isSuffixOf)
10+
811data HakyllConfiguration = HakyllConfiguration
912 { -- | Directory in which the output written
1013 destinationDirectory :: FilePath
1114 , -- | Directory where hakyll's internal store is kept
1215 storeDirectory :: FilePath
13− } deriving (Show)
16+ , -- | Function to determine ignored files
17+ --
18+ -- In 'defaultHakyllConfiguration', the following files are ignored:
19+ --
20+ -- * files starting with a @.@
21+ --
22+ -- * files ending with a @~@
23+ --
24+ -- * files ending with @.swp@
25+ --
26+ ignoreFile :: FilePath -> Bool
27+ }
1428
1529-- | Default configuration for a hakyll application
1630--
@@ -18,4 +32,13 @@ defaultHakyllConfiguration :: HakyllConfiguration
1832defaultHakyllConfiguration = HakyllConfiguration
1933 { destinationDirectory = "_site"
2034 , storeDirectory = "_cache"
35+ , ignoreFile = ignoreFile'
2136 }
37+ where
38+ ignoreFile' path
39+ | "." `isPrefixOf` fileName = True
40+ | "~" `isSuffixOf` fileName = True
41+ | ".swp" `isSuffixOf` fileName = True
42+ | otherwise = False
43+ where
44+ fileName = takeFileName path
src/Hakyll/Core/ResourceProvider/FileResourceProvider.hs+5−3
@@ -11,13 +11,15 @@ import qualified Data.ByteString.Lazy as LB
1111import Hakyll.Core.ResourceProvider
1212import Hakyll.Core.Identifier
1313import Hakyll.Core.Util.File
14+import Hakyll.Core.Configuration
1415
1516-- | Create a filesystem-based 'ResourceProvider'
1617--
17−fileResourceProvider :: IO ResourceProvider
18−fileResourceProvider = do
18+fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider
19+fileResourceProvider configuration = do
1920 -- Retrieve a list of identifiers
20− list <- map parseIdentifier <$> getRecursiveContents False "."
21+ list <- map parseIdentifier . filter (not . ignoreFile configuration) <$>
22+ getRecursiveContents False "."
2123
2224 -- Construct a resource provider
2325 return ResourceProvider
src/Hakyll/Core/Run.hs+1−1
@@ -37,7 +37,7 @@ import Hakyll.Core.Configuration
3737run :: HakyllConfiguration -> Rules -> IO RuleSet
3838run configuration rules = do
3939 store <- makeStore $ storeDirectory configuration
40− provider <- fileResourceProvider
40+ provider <- fileResourceProvider configuration
4141 let ruleSet = runRules rules provider
4242 compilers = rulesCompilers ruleSet
4343
src/Hakyll/Main.hs+3−1
@@ -88,7 +88,9 @@ preview configuration rules port = do
8888
8989 -- Get the resource list and a callback for the preview poll
9090 let resources = rulesResources ruleSet
91− callback = build configuration rules
91+ callback = do
92+ putStrLn "In TL callback"
93+ build configuration rules
9294
9395 -- Fork a thread polling for changes
9496 _ <- forkIO $ previewPoll configuration resources callback
src/Hakyll/Web/Preview/INotify.hs+4−3
@@ -8,6 +8,7 @@ import Control.Monad (forM_, when)
88import Data.Set (Set)
99import qualified Data.Set as S
1010import System.FilePath (takeDirectory, (</>))
11+import Data.List (isPrefixOf)
1112
1213import System.INotify
1314
@@ -38,9 +39,9 @@ previewPoll _ resources callback = do
3839 notEmpty x = x
3940
4041 -- Execute the callback when path is known
41− ifResource path = when (path `S.member` paths) $ do
42− putStrLn $ "Changed: " ++ path
43− callback
42+ ifResource path =
43+ let path' = if "./" `isPrefixOf` path then drop 2 path else path
44+ in when (path' `S.member` paths) callback
4445
4546 -- Add a watcher for every directory
4647 forM_ directories $ \directory -> do