on master help sign in
Better error message for require/notFound
commit95e1fcf0a2a5a51e486311079d7aa2bb2035c8e6 authorJasper Van der Jeugt <m@jaspervdj.be> dateWed 5 Dec 2012, 16:49 (14 years ago) parentf0f61d9
4 files changed+19−10
src/Hakyll/Core/Compiler/Internal.hs+4−2 src/Hakyll/Core/Compiler/Require.hs+7−1 src/Hakyll/Core/Runtime.hs+6−6 tests/TestSuite/Util.hs+2−1
src/Hakyll/Core/Compiler/Internal.hs+4−2
@@ -29,6 +29,8 @@ import Control.Applicative (Alternative (..),
2929 Applicative (..), (<$>))
3030import Control.Exception (SomeException, handle)
3131import Data.Monoid (Monoid (..))
32+import Data.Set (Set)
33+import qualified Data.Set as S
3234
3335
3436--------------------------------------------------------------------------------
@@ -50,7 +52,7 @@ data CompilerRead = CompilerRead
5052 , -- | Resource provider
5153 compilerProvider :: Provider
5254 , -- | List of all known identifiers
53− compilerUniverse :: [Identifier]
55+ compilerUniverse :: Set Identifier
5456 , -- | Site routes
5557 compilerRoutes :: Routes
5658 , -- | Compiler store
@@ -219,6 +221,6 @@ compilerGetMetadata identifier = do
219221compilerGetMatches :: Pattern -> Compiler [Identifier]
220222compilerGetMatches pattern = do
221223 universe <- compilerUniverse <$> compilerAsk
222− let matching = filterMatches pattern universe
224+ let matching = filterMatches pattern $ S.toList universe
223225 compilerTellDependencies [PatternDependency pattern matching]
224226 return matching
src/Hakyll/Core/Compiler/Require.hs+7−1
@@ -14,7 +14,9 @@ module Hakyll.Core.Compiler.Require
1414
1515--------------------------------------------------------------------------------
1616import Control.Applicative ((<$>))
17+import Control.Monad (when)
1718import Data.Binary (Binary)
19+import qualified Data.Set as S
1820import Data.Typeable
1921
2022
@@ -61,7 +63,11 @@ require id' = requireSnapshot id' final
6163requireSnapshot :: (Binary a, Typeable a)
6264 => Identifier -> Snapshot -> Compiler (Item a)
6365requireSnapshot 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
6571
6672 compilerTellDependencies [IdentifierDependency id']
6773 compilerResult $ CompilerRequire id' $ do
src/Hakyll/Core/Runtime.hs+6−6
@@ -66,7 +66,7 @@ run config rules = do
6666 , runtimeProvider = provider
6767 , runtimeStore = store
6868 , runtimeRoutes = rulesRoutes ruleSet
69− , runtimeUniverse = compilers
69+ , runtimeUniverse = M.fromList compilers
7070 }
7171 state = RuntimeState
7272 { runtimeDone = S.empty
@@ -97,7 +97,7 @@ data RuntimeRead = RuntimeRead
9797 , runtimeProvider :: Provider
9898 , runtimeStore :: Store
9999 , runtimeRoutes :: Routes
100− , runtimeUniverse :: [(Identifier, Compiler SomeItem)]
100+ , runtimeUniverse :: Map Identifier (Compiler SomeItem)
101101 }
102102
103103
@@ -133,12 +133,12 @@ scheduleOutOfDate = do
133133 facts <- runtimeFacts <$> get
134134 todo <- runtimeTodo <$> get
135135
136− let identifiers = map fst universe
136+ let identifiers = M.keys universe
137137 modified <- fmap S.fromList $ flip filterM identifiers $
138138 liftIO . resourceModified provider
139139 let (ood, facts', msgs) = outOfDate identifiers modified facts
140− todo' = M.fromList
141− [(id', c) | (id', c) <- universe, id' `S.member` ood]
140+ todo' = M.filterWithKey
141+ (\id' _ -> id' `S.member` ood) universe
142142
143143 -- Print messages
144144 mapM_ (Logger.debug logger) msgs
@@ -181,7 +181,7 @@ chase trail id'
181181 read' = CompilerRead
182182 { compilerUnderlying = id'
183183 , compilerProvider = provider
184− , compilerUniverse = map fst universe
184+ , compilerUniverse = M.keysSet universe
185185 , compilerRoutes = routes
186186 , compilerStore = store
187187 , compilerLogger = logger
tests/TestSuite/Util.hs+2−1
@@ -14,6 +14,7 @@ module TestSuite.Util
1414
1515--------------------------------------------------------------------------------
1616import Data.Monoid (mempty)
17+import qualified Data.Set as S
1718import System.Directory (removeDirectoryRecursive)
1819import Test.Framework
1920import Test.Framework.Providers.HUnit
@@ -71,7 +72,7 @@ testCompiler store provider underlying compiler = do
7172 let read' = CompilerRead
7273 { compilerUnderlying = underlying
7374 , compilerProvider = provider
74− , compilerUniverse = []
75+ , compilerUniverse = S.empty
7576 , compilerRoutes = mempty
7677 , compilerStore = store
7778 , compilerLogger = logger