on master help sign in
The dependency analyzer now knows a little more
730eebeJasper Van der Jeugt
.ghci+1−1
@@ -1 +1 @@
1−:set -isrc -itests -idist/build/autogen
1+:set -isrc -isrc-inotify -itests -idist/build/autogen
src/Hakyll.hs+2
@@ -6,6 +6,7 @@ module Hakyll
6 , module Hakyll.Core.Configuration
6 , module Hakyll.Core.Configuration
7 , module Hakyll.Core.Identifier
7 , module Hakyll.Core.Identifier
8 , module Hakyll.Core.Identifier.Pattern
8 , module Hakyll.Core.Identifier.Pattern
9+ , module Hakyll.Core.ResourceProvider
9 , module Hakyll.Core.Routes
10 , module Hakyll.Core.Routes
10 , module Hakyll.Core.Rules
11 , module Hakyll.Core.Rules
11 , module Hakyll.Core.UnixFilter
12 , module Hakyll.Core.UnixFilter
@@ -31,6 +32,7 @@ import Hakyll.Core.CopyFile
31import Hakyll.Core.Configuration
32import Hakyll.Core.Configuration
32import Hakyll.Core.Identifier
33import Hakyll.Core.Identifier
33import Hakyll.Core.Identifier.Pattern
34import Hakyll.Core.Identifier.Pattern
35+import Hakyll.Core.ResourceProvider
34import Hakyll.Core.Routes
36import Hakyll.Core.Routes
35import Hakyll.Core.Rules
37import Hakyll.Core.Rules
36import Hakyll.Core.UnixFilter
38import Hakyll.Core.UnixFilter
src/Hakyll/Core/Compiler.hs+1−1
@@ -225,7 +225,7 @@ requireA identifier = (id &&& require_ identifier >>>)
225requireAll_ :: (Binary a, Typeable a, Writable a)
225requireAll_ :: (Binary a, Typeable a, Writable a)
226 => Pattern
226 => Pattern
227 -> Compiler b [a]
227 -> Compiler b [a]
228−requireAll_ pattern = fromDependencies getDeps >>> fromJob requireAll_'
228+requireAll_ pattern = fromDependencies (const getDeps) >>> fromJob requireAll_'
229 where
229 where
230 getDeps = matches pattern . map unResource . resourceList
230 getDeps = matches pattern . map unResource . resourceList
231 requireAll_' = const $ CompilerM $ do
231 requireAll_' = const $ CompilerM $ do
src/Hakyll/Core/Compiler/Internal.hs+23−5
@@ -32,6 +32,15 @@ import Hakyll.Core.Logger
32--
32--
33type Dependencies = Set Identifier
33type Dependencies = Set Identifier
34
34
35+-- | Environment in which the dependency analyzer runs
36+--
37+data DependencyEnvironment = DependencyEnvironment
38+ { -- | Target identifier
39+ dependencyIdentifier :: Identifier
40+ , -- | Resource provider
41+ dependencyResourceProvider :: ResourceProvider
42+ }
43+
35-- | Environment in which a compiler runs
44-- | Environment in which a compiler runs
36--
45--
37data CompilerEnvironment = CompilerEnvironment
46data CompilerEnvironment = CompilerEnvironment
@@ -58,7 +67,7 @@ newtype CompilerM a = CompilerM
58-- | The compiler arrow
67-- | The compiler arrow
59--
68--
60data Compiler a b = Compiler
69data Compiler a b = Compiler
61− { compilerDependencies :: Reader ResourceProvider Dependencies
70+ { compilerDependencies :: Reader DependencyEnvironment Dependencies
62 , compilerJob :: a -> CompilerM b
71 , compilerJob :: a -> CompilerM b
63 }
72 }
64
73
@@ -109,19 +118,28 @@ runCompilerJob compiler identifier provider route store modified logger =
109 }
118 }
110
119
111runCompilerDependencies :: Compiler () a
120runCompilerDependencies :: Compiler () a
121+ -> Identifier
112 -> ResourceProvider
122 -> ResourceProvider
113 -> Dependencies
123 -> Dependencies
124+runCompilerDependencies compiler identifier provider =
114−runCompilerDependencies compiler = runReader (compilerDependencies compiler)
125+ runReader (compilerDependencies compiler) env
126+ where
127+ env = DependencyEnvironment
128+ { dependencyIdentifier = identifier
129+ , dependencyResourceProvider = provider
130+ }
115
131
116fromJob :: (a -> CompilerM b)
132fromJob :: (a -> CompilerM b)
117 -> Compiler a b
133 -> Compiler a b
118fromJob = Compiler (return S.empty)
134fromJob = Compiler (return S.empty)
119
135
120−fromDependencies :: (ResourceProvider -> [Identifier])
136+fromDependencies :: (Identifier -> ResourceProvider -> [Identifier])
121 -> Compiler b b
137 -> Compiler b b
122−fromDependencies deps = Compiler (S.fromList . deps <$> ask) return
138+fromDependencies collectDeps = flip Compiler return $ do
139+ DependencyEnvironment identifier provider <- ask
140+ return $ S.fromList $ collectDeps identifier provider
123
141
124-- | Wait until another compiler has finished before running this compiler
142-- | Wait until another compiler has finished before running this compiler
125--
143--
126fromDependency :: Identifier -> Compiler a a
144fromDependency :: Identifier -> Compiler a a
127−fromDependency = fromDependencies . const . return
145+fromDependency = fromDependencies . const . const . return
src/Hakyll/Core/Run.hs+1−1
@@ -118,7 +118,7 @@ addNewCompilers oldCompilers newCompilers = Runtime $ do
118
118
119 -- Get all dependencies for the compilers
119 -- Get all dependencies for the compilers
120 dependencies = flip map compilers $ \(id', compiler) ->
120 dependencies = flip map compilers $ \(id', compiler) ->
121− let deps = runCompilerDependencies compiler provider
121+ let deps = runCompilerDependencies compiler id' provider
122 in (id', deps)
122 in (id', deps)
123
123
124 -- Create a compiler map (Id -> Compiler)
124 -- Create a compiler map (Id -> Compiler)