on master help sign in
Better error message for require/notFound
95e1fcfJasper Van der Jeugt
src/Hakyll/Core/Compiler/Internal.hs+4−2
@@ -29,6 +29,8 @@ import Control.Applicative (Alternative (..),
29 Applicative (..), (<$>))
29 Applicative (..), (<$>))
30import Control.Exception (SomeException, handle)
30import Control.Exception (SomeException, handle)
31import Data.Monoid (Monoid (..))
31import Data.Monoid (Monoid (..))
32+import Data.Set (Set)
33+import qualified Data.Set as S
32
34
33
35
34--------------------------------------------------------------------------------
36--------------------------------------------------------------------------------
@@ -50,7 +52,7 @@ data CompilerRead = CompilerRead
50 , -- | Resource provider
52 , -- | Resource provider
51 compilerProvider :: Provider
53 compilerProvider :: Provider
52 , -- | List of all known identifiers
54 , -- | List of all known identifiers
53− compilerUniverse :: [Identifier]
55+ compilerUniverse :: Set Identifier
54 , -- | Site routes
56 , -- | Site routes
55 compilerRoutes :: Routes
57 compilerRoutes :: Routes
56 , -- | Compiler store
58 , -- | Compiler store
@@ -219,6 +221,6 @@ compilerGetMetadata identifier = do
219compilerGetMatches :: Pattern -> Compiler [Identifier]
221compilerGetMatches :: Pattern -> Compiler [Identifier]
220compilerGetMatches pattern = do
222compilerGetMatches pattern = do
221 universe <- compilerUniverse <$> compilerAsk
223 universe <- compilerUniverse <$> compilerAsk
222− let matching = filterMatches pattern universe
224+ let matching = filterMatches pattern $ S.toList universe
223 compilerTellDependencies [PatternDependency pattern matching]
225 compilerTellDependencies [PatternDependency pattern matching]
224 return matching
226 return matching
src/Hakyll/Core/Compiler/Require.hs+7−1
@@ -14,7 +14,9 @@ module Hakyll.Core.Compiler.Require
14
14
15--------------------------------------------------------------------------------
15--------------------------------------------------------------------------------
16import Control.Applicative ((<$>))
16import Control.Applicative ((<$>))
17+import Control.Monad (when)
17import Data.Binary (Binary)
18import Data.Binary (Binary)
19+import qualified Data.Set as S
18import Data.Typeable
20import Data.Typeable
19
21
20
22
@@ -61,7 +63,11 @@ require id' = requireSnapshot id' final
61requireSnapshot :: (Binary a, Typeable a)
63requireSnapshot :: (Binary a, Typeable a)
62 => Identifier -> Snapshot -> Compiler (Item a)
64 => Identifier -> Snapshot -> Compiler (Item a)
63requireSnapshot id' snapshot = do
65requireSnapshot id' snapshot = do
64− store <- compilerStore <$> compilerAsk
66+ store <- compilerStore <$> compilerAsk
67+ universe <- compilerUniverse <$> compilerAsk
68+
69+ -- Quick check for better error messages
70+ when (id' `S.notMember` universe) $ compilerThrow notFound
65
71
66 compilerTellDependencies [IdentifierDependency id']
72 compilerTellDependencies [IdentifierDependency id']
67 compilerResult $ CompilerRequire id' $ do
73 compilerResult $ CompilerRequire id' $ do
src/Hakyll/Core/Runtime.hs+6−6
@@ -66,7 +66,7 @@ run config rules = do
66 , runtimeProvider = provider
66 , runtimeProvider = provider
67 , runtimeStore = store
67 , runtimeStore = store
68 , runtimeRoutes = rulesRoutes ruleSet
68 , runtimeRoutes = rulesRoutes ruleSet
69− , runtimeUniverse = compilers
69+ , runtimeUniverse = M.fromList compilers
70 }
70 }
71 state = RuntimeState
71 state = RuntimeState
72 { runtimeDone = S.empty
72 { runtimeDone = S.empty
@@ -97,7 +97,7 @@ data RuntimeRead = RuntimeRead
97 , runtimeProvider :: Provider
97 , runtimeProvider :: Provider
98 , runtimeStore :: Store
98 , runtimeStore :: Store
99 , runtimeRoutes :: Routes
99 , runtimeRoutes :: Routes
100− , runtimeUniverse :: [(Identifier, Compiler SomeItem)]
100+ , runtimeUniverse :: Map Identifier (Compiler SomeItem)
101 }
101 }
102
102
103
103
@@ -133,12 +133,12 @@ scheduleOutOfDate = do
133 facts <- runtimeFacts <$> get
133 facts <- runtimeFacts <$> get
134 todo <- runtimeTodo <$> get
134 todo <- runtimeTodo <$> get
135
135
136− let identifiers = map fst universe
136+ let identifiers = M.keys universe
137 modified <- fmap S.fromList $ flip filterM identifiers $
137 modified <- fmap S.fromList $ flip filterM identifiers $
138 liftIO . resourceModified provider
138 liftIO . resourceModified provider
139 let (ood, facts', msgs) = outOfDate identifiers modified facts
139 let (ood, facts', msgs) = outOfDate identifiers modified facts
140− todo' = M.fromList
140+ todo' = M.filterWithKey
141− [(id', c) | (id', c) <- universe, id' `S.member` ood]
141+ (\id' _ -> id' `S.member` ood) universe
142
142
143 -- Print messages
143 -- Print messages
144 mapM_ (Logger.debug logger) msgs
144 mapM_ (Logger.debug logger) msgs
@@ -181,7 +181,7 @@ chase trail id'
181 read' = CompilerRead
181 read' = CompilerRead
182 { compilerUnderlying = id'
182 { compilerUnderlying = id'
183 , compilerProvider = provider
183 , compilerProvider = provider
184− , compilerUniverse = map fst universe
184+ , compilerUniverse = M.keysSet universe
185 , compilerRoutes = routes
185 , compilerRoutes = routes
186 , compilerStore = store
186 , compilerStore = store
187 , compilerLogger = logger
187 , compilerLogger = logger
tests/TestSuite/Util.hs+2−1
@@ -14,6 +14,7 @@ module TestSuite.Util
14
14
15--------------------------------------------------------------------------------
15--------------------------------------------------------------------------------
16import Data.Monoid (mempty)
16import Data.Monoid (mempty)
17+import qualified Data.Set as S
17import System.Directory (removeDirectoryRecursive)
18import System.Directory (removeDirectoryRecursive)
18import Test.Framework
19import Test.Framework
19import Test.Framework.Providers.HUnit
20import Test.Framework.Providers.HUnit
@@ -71,7 +72,7 @@ testCompiler store provider underlying compiler = do
71 let read' = CompilerRead
72 let read' = CompilerRead
72 { compilerUnderlying = underlying
73 { compilerUnderlying = underlying
73 , compilerProvider = provider
74 , compilerProvider = provider
74− , compilerUniverse = []
75+ , compilerUniverse = S.empty
75 , compilerRoutes = mempty
76 , compilerRoutes = mempty
76 , compilerStore = store
77 , compilerStore = store
77 , compilerLogger = logger
78 , compilerLogger = logger