on master help sign in
Fix tag dependency issue, slightly improve caching
commit8229765cbdf971c15e18fc8eb5a5733340b57739 authorJasper Van der Jeugt <m@jaspervdj.be> dateFri 11 Apr 2014, 21:12 (13 years ago) parent889e6f5
6 files changed+17−11
src/Hakyll/Core/Compiler/Internal.hs+2−1 src/Hakyll/Core/Dependencies.hs+3−3 src/Hakyll/Core/Metadata.hs+2−1 src/Hakyll/Web/Paginate.hs+3−2 src/Hakyll/Web/Tags.hs+5−3 tests/Hakyll/Core/Dependencies/Tests.hs+2−1
src/Hakyll/Core/Compiler/Internal.hs+2−1
@@ -248,5 +248,6 @@ compilerGetMatches :: Pattern -> Compiler [Identifier]
248248compilerGetMatches pattern = do
249249 universe <- compilerUniverse <$> compilerAsk
250250 let matching = filterMatches pattern $ S.toList universe
251− compilerTellDependencies [PatternDependency pattern matching]
251+ set' = S.fromList matching
252+ compilerTellDependencies [PatternDependency pattern set']
252253 return matching
src/Hakyll/Core/Dependencies.hs+3−3
@@ -32,7 +32,7 @@ import Hakyll.Core.Identifier.Pattern
3232
3333--------------------------------------------------------------------------------
3434data Dependency
35− = PatternDependency Pattern [Identifier]
35+ = PatternDependency Pattern (Set Identifier)
3636 | IdentifierDependency Identifier
3737 deriving (Show, Typeable)
3838
@@ -91,7 +91,7 @@ dependenciesFor id' = do
9191 return $ concatMap dependenciesFor' $ fromMaybe [] $ M.lookup id' facts
9292 where
9393 dependenciesFor' (IdentifierDependency i) = [i]
94− dependenciesFor' (PatternDependency _ is) = is
94+ dependenciesFor' (PatternDependency _ is) = S.toList is
9595
9696
9797--------------------------------------------------------------------------------
@@ -116,7 +116,7 @@ checkChangedPatterns = do
116116 go _ ds (IdentifierDependency i) = return $ IdentifierDependency i : ds
117117 go id' ds (PatternDependency p ls) = do
118118 universe <- ask
119− let ls' = filterMatches p universe
119+ let ls' = S.fromList $ filterMatches p universe
120120 if ls == ls'
121121 then return $ PatternDependency p ls : ds
122122 else do
src/Hakyll/Core/Metadata.hs+2−1
@@ -12,6 +12,7 @@ module Hakyll.Core.Metadata
1212import Control.Monad (forM)
1313import Data.Map (Map)
1414import qualified Data.Map as M
15+import qualified Data.Set as S
1516
1617
1718--------------------------------------------------------------------------------
@@ -60,4 +61,4 @@ getMetadataField' identifier key = do
6061makePatternDependency :: MonadMetadata m => Pattern -> m Dependency
6162makePatternDependency pattern = do
6263 matches' <- getMatches pattern
63− return $ PatternDependency pattern matches'
64+ return $ PatternDependency pattern (S.fromList matches')
src/Hakyll/Web/Paginate.hs+3−2
@@ -15,6 +15,7 @@ import Control.Monad (forM_)
1515import Data.List (unfoldr)
1616import qualified Data.Map as M
1717import Data.Monoid (mconcat)
18+import qualified Data.Set as S
1819import Text.Printf (printf)
1920
2021
@@ -58,7 +59,7 @@ buildPaginate pattern = do
5859 "invalid page number: " ++ show pn
5960
6061 return $ Paginate pagPages pagPlaces makeId
61− (PatternDependency pattern idents)
62+ (PatternDependency pattern (S.fromList idents))
6263
6364
6465--------------------------------------------------------------------------------
@@ -81,7 +82,7 @@ buildPaginateWith n makeId pattern = do
8182 [(makeId i, i) | i <- [1 .. nPages]]
8283
8384 return $ Paginate (M.fromList paginatePages') (M.fromList pagPlaces') makeId
84− (PatternDependency pattern idents)
85+ (PatternDependency pattern (S.fromList idents))
8586
8687
8788--------------------------------------------------------------------------------
src/Hakyll/Web/Tags.hs+5−3
@@ -71,6 +71,7 @@ import qualified Data.Map as M
7171import Data.Maybe (catMaybes, fromMaybe)
7272import Data.Monoid (mconcat)
7373import Data.Ord (comparing)
74+import qualified Data.Set as S
7475import System.FilePath (takeBaseName, takeDirectory)
7576import Text.Blaze.Html (toHtml, toValue, (!))
7677import Text.Blaze.Html.Renderer.String (renderHtml)
@@ -124,7 +125,8 @@ buildTagsWith :: MonadMetadata m
124125buildTagsWith f pattern makeId = do
125126 ids <- getMatches pattern
126127 tagMap <- foldM addTags M.empty ids
127− return $ Tags (M.toList tagMap) makeId (PatternDependency pattern ids)
128+ let set' = S.fromList ids
129+ return $ Tags (M.toList tagMap) makeId (PatternDependency pattern set')
128130 where
129131 -- Create a tag map for one page
130132 addTags tagMap id' = do
@@ -148,8 +150,8 @@ buildCategories = buildTagsWith getCategory
148150tagsRules :: Tags -> (String -> Pattern -> Rules ()) -> Rules ()
149151tagsRules tags rules =
150152 forM_ (tagsMap tags) $ \(tag, identifiers) ->
151− create [tagsMakeId tags tag] $
152− rulesExtraDependencies [tagsDependency tags] $
153+ rulesExtraDependencies [tagsDependency tags] $
154+ create [tagsMakeId tags tag] $
153155 rules tag $ fromList identifiers
154156
155157
tests/Hakyll/Core/Dependencies/Tests.hs+2−1
@@ -38,7 +38,8 @@ oldFacts = M.fromList
3838 , ("posts/02.md",
3939 [])
4040 , ("index.md",
41− [ PatternDependency "posts/*" ["posts/01.md", "posts/02.md"]
41+ [ PatternDependency "posts/*"
42+ (S.fromList ["posts/01.md", "posts/02.md"])
4243 , IdentifierDependency "posts/01.md"
4344 , IdentifierDependency "posts/02.md"
4445 ])