summaryrefslogtreecommitdiff
path: root/src/Hakyll/Core
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2012-11-29 16:22:08 +0100
committerJasper Van der Jeugt <m@jaspervdj.be>2012-11-29 16:22:08 +0100
commitfe33635a880bfb6f3d182f20aad5542b9f6152ce (patch)
tree0db3f07e0fa592926635203f674a8d61ab74239a /src/Hakyll/Core
parent0e925e71e18d61f9b4eee715378946f47ad0e819 (diff)
downloadhakyll-fe33635a880bfb6f3d182f20aad5542b9f6152ce.tar.gz
Fix dependency issues for tags
Diffstat (limited to 'src/Hakyll/Core')
-rw-r--r--src/Hakyll/Core/Dependencies.hs6
-rw-r--r--src/Hakyll/Core/Rules.hs22
2 files changed, 25 insertions, 3 deletions
diff --git a/src/Hakyll/Core/Dependencies.hs b/src/Hakyll/Core/Dependencies.hs
index e81b38f..7597e61 100644
--- a/src/Hakyll/Core/Dependencies.hs
+++ b/src/Hakyll/Core/Dependencies.hs
@@ -88,8 +88,10 @@ markOod id' = State.modify $ \s ->
dependenciesFor :: Identifier -> DependencyM [Identifier]
dependenciesFor id' = do
facts <- dependencyFacts <$> State.get
- let relevant = fromMaybe [] $ M.lookup id' facts
- return [i | IdentifierDependency i <- relevant]
+ return $ concatMap dependenciesFor' $ fromMaybe [] $ M.lookup id' facts
+ where
+ dependenciesFor' (IdentifierDependency i) = [i]
+ dependenciesFor' (PatternDependency _ is) = is
--------------------------------------------------------------------------------
diff --git a/src/Hakyll/Core/Rules.hs b/src/Hakyll/Core/Rules.hs
index fb6458b..a234306 100644
--- a/src/Hakyll/Core/Rules.hs
+++ b/src/Hakyll/Core/Rules.hs
@@ -22,6 +22,9 @@ module Hakyll.Core.Rules
, version
, compile
, route
+
+ -- * Advanced usage
+ , rulesExtraDependencies
) where
@@ -29,7 +32,7 @@ module Hakyll.Core.Rules
import Control.Applicative ((<$>))
import Control.Arrow (second)
import Control.Monad.Reader (ask, local)
-import Control.Monad.Writer (tell)
+import Control.Monad.Writer (censor, tell)
import Data.Monoid (mappend, mempty)
import qualified Data.Set as S
@@ -41,6 +44,7 @@ import Data.Typeable (Typeable)
--------------------------------------------------------------------------------
import Hakyll.Core.Compiler.Internal
+import Hakyll.Core.Dependencies
import Hakyll.Core.Identifier
import Hakyll.Core.Identifier.Pattern
import Hakyll.Core.Item
@@ -125,3 +129,19 @@ route route' = Rules $ do
version' <- rulesVersion <$> ask
unRules $ tellRoute $ matchRoute
(pattern `mappend` fromVersion version') route'
+
+
+--------------------------------------------------------------------------------
+-- | Advanced usage: add extra dependencies to compilers. Basically this is
+-- needed when you're doing unsafe tricky stuff in the rules monad, but you
+-- still want correct builds.
+rulesExtraDependencies :: [Dependency] -> Rules a -> Rules a
+rulesExtraDependencies deps = Rules . censor addDependencies . unRules
+ where
+ -- Adds the dependencies to the compilers in the ruleset
+ addDependencies ruleSet = ruleSet
+ { rulesCompilers =
+ [ (i, compilerTellDependencies deps >> c)
+ | (i, c) <- rulesCompilers ruleSet
+ ]
+ }