on master help sign in
Add requireAll function
commitbf31c55c99496fe20274df73a831fb1db86591e4 authorJasper Van der Jeugt <jaspervdj@gmail.com> dateWed 29 Dec 2010, 15:33 (16 years ago) parent27ff2ee
2 files changed+34−6
src/Hakyll/Core/Compiler.hs+24−4 src/Hakyll/Core/Run.hs+10−2
src/Hakyll/Core/Compiler.hs+24−4
@@ -7,6 +7,7 @@ module Hakyll.Core.Compiler
77 , Compiler
88 , runCompiler
99 , require
10+ , requireAll
1011 , compileFromString
1112 ) where
1213
@@ -20,10 +21,12 @@ import Data.Typeable (Typeable)
2021import Data.Binary (Binary)
2122
2223import Hakyll.Core.Identifier
24+import Hakyll.Core.Identifier.Pattern
2325import Hakyll.Core.Target
2426import Hakyll.Core.Target.Internal
2527import Hakyll.Core.CompiledItem
2628import Hakyll.Core.Writable
29+import Hakyll.Core.ResourceProvider
2730
2831-- | A set of dependencies
2932--
@@ -41,7 +44,8 @@ addDependency dependency = CompilerM $ modify $ addDependency'
4144-- | Environment in which a compiler runs
4245--
4346data CompilerEnvironment = CompilerEnvironment
44− { compilerIdentifier :: Identifier -- ^ Target identifier
47+ { compilerIdentifier :: Identifier -- ^ Target identifier
48+ , compilerResourceProvider :: ResourceProvider -- ^ Resource provider
4549 }
4650
4751-- | State carried along by a compiler
@@ -63,12 +67,17 @@ type Compiler a = CompilerM (TargetM a)
6367
6468-- | Run a compiler, yielding the resulting target and it's dependencies
6569--
66−runCompiler :: Compiler a -> Identifier -> (TargetM a, Dependencies)
67−runCompiler compiler identifier = second compilerDependencies $
70+runCompiler :: Compiler a -> Identifier -> ResourceProvider
71+ -> (TargetM a, Dependencies)
72+runCompiler compiler identifier provider = second compilerDependencies $
6873 runState (runReaderT (unCompilerM compiler) env) state
6974 where
70− env = CompilerEnvironment {compilerIdentifier = identifier}
7175 state = CompilerState S.empty
76+ env = CompilerEnvironment
77+ { compilerIdentifier = identifier
78+ , compilerResourceProvider = provider
79+ }
80+
7281
7382-- | Require another target. Using this function ensures automatic handling of
7483-- dependencies
@@ -82,6 +91,17 @@ require identifier = do
8291 lookup' <- targetDependencyLookup <$> ask
8392 return $ unCompiledItem $ lookup' identifier
8493
94+-- | Require a number of targets. Using this function ensures automatic handling
95+-- of dependencies
96+--
97+requireAll :: (Binary a, Typeable a, Writable a)
98+ => Pattern
99+ -> Compiler [a]
100+requireAll pattern = CompilerM $ do
101+ provider <- compilerResourceProvider <$> ask
102+ r <- unCompilerM $ mapM require $ matches pattern $ resourceList provider
103+ return $ sequence r
104+
85105-- | Construct a target from a string, this string being the content of the
86106-- resource.
87107--
src/Hakyll/Core/Run.hs+10−2
@@ -8,14 +8,17 @@ import qualified Data.Map as M
88import Data.Monoid (mempty)
99import Data.Typeable (Typeable)
1010import Data.Binary (Binary)
11+import System.FilePath ((</>))
1112
1213import Hakyll.Core.Route
14+import Hakyll.Core.Util.File
1315import Hakyll.Core.Compiler
1416import Hakyll.Core.ResourceProvider
1517import Hakyll.Core.ResourceProvider.FileResourceProvider
1618import Hakyll.Core.Rules
1719import Hakyll.Core.Target
1820import Hakyll.Core.DirectedGraph
21+import Hakyll.Core.DirectedGraph.Dot
1922import Hakyll.Core.DirectedGraph.DependencySolver
2023import Hakyll.Core.Writable
2124import Hakyll.Core.Store
@@ -37,7 +40,7 @@ hakyllWith rules provider store = do
3740
3841 -- Get all targets
3942 targets = flip map compilers $ \(id', compiler) ->
40− let (targ, deps) = runCompiler compiler id'
43+ let (targ, deps) = runCompiler compiler id' provider
4144 in (id', targ, deps)
4245
4346 -- Map mapping every identifier to it's target
@@ -55,6 +58,9 @@ hakyllWith rules provider store = do
5558 -- Fetch the routes
5659 route' = rulesRoute ruleSet
5760
61+ putStrLn "Writing dependency graph to dependencies.dot..."
62+ writeDot "dependencies.dot" show graph
63+
5864 -- Generate all the targets in order
5965 _ <- foldM (addTarget route') M.empty orderedTargets
6066
@@ -68,7 +74,9 @@ hakyllWith rules provider store = do
6874 Nothing -> return ()
6975 Just r -> do
7076 putStrLn $ "Routing " ++ show id' ++ " to " ++ r
71− write r compiled
77+ let path = "_site" </> r
78+ makeDirectories path
79+ write path compiled
7280
7381 return $ M.insert id' compiled map'
7482