on master help sign in
Throw an error in case of duplicate compilers
commitffbce966075d258b16b44e6856333ef41e4487f4 authorJasper Van der Jeugt <m@jaspervdj.be> dateFri 22 Nov 2013, 13:56 (13 years ago) parent5e70351
2 files changed+19−6
src/Hakyll/Core/Rules/Internal.hs+17−5 src/Hakyll/Core/Runtime.hs+2−1
src/Hakyll/Core/Rules/Internal.hs+17−5
@@ -16,6 +16,7 @@ import Control.Applicative (Applicative, (<$>))
1616import Control.Monad.Reader (ask)
1717import Control.Monad.RWS (RWST, runRWST)
1818import Control.Monad.Trans (liftIO)
19+import Data.Map (Map)
1920import qualified Data.Map as M
2021import Data.Monoid (Monoid, mappend, mempty)
2122import Data.Set (Set)
@@ -97,15 +98,26 @@ runRules rules provider = do
9798 (_, _, ruleSet) <- runRWST (unRules rules) env emptyRulesState
9899
99100 -- Ensure compiler uniqueness
100− let ruleSet' = ruleSet
101− { rulesCompilers = M.toList $
102− M.fromListWith (flip const) (rulesCompilers ruleSet)
103− }
101+ uniqueCompilers <- case fromListUnique (rulesCompilers ruleSet) of
102+ Right m -> return m
103+ Left id' -> error $
104+ "Hakyll.Core.Rules.Internal.runRules: duplicate compiler for " ++
105+ show id'
104106
105− return ruleSet'
107+ return ruleSet {rulesCompilers = M.toList uniqueCompilers}
106108 where
107109 env = RulesRead
108110 { rulesProvider = provider
109111 , rulesMatches = []
110112 , rulesVersion = Nothing
111113 }
114+
115+
116+--------------------------------------------------------------------------------
117+fromListUnique :: Ord k => [(k, v)] -> Either k (Map k v)
118+fromListUnique = go M.empty
119+ where
120+ go m [] = Right m
121+ go m ((k, v) : zs) = case M.lookup k m of
122+ Nothing -> go (M.insert k v m) zs
123+ Just _ -> Left k
src/Hakyll/Core/Runtime.hs+2−1
@@ -53,7 +53,8 @@ run config verbosity rules = do
5353 provider <- newProvider store (shouldIgnoreFile config) $
5454 providerDirectory config
5555 Logger.message logger "Running rules..."
56− ruleSet <- runRules rules provider
56+ Logger.flush logger
57+ ruleSet <- runRules rules provider
5758
5859 -- Get old facts
5960 mOldFacts <- Store.get store factsKey