Throw an error in case of duplicate compilers

This commit is contained in:
Jasper Van der Jeugt 2013-11-22 13:56:17 +01:00
parent 5e70351a40
commit ffbce96607
2 changed files with 19 additions and 6 deletions

View file

@ -16,6 +16,7 @@ import Control.Applicative (Applicative, (<$>))
import Control.Monad.Reader (ask)
import Control.Monad.RWS (RWST, runRWST)
import Control.Monad.Trans (liftIO)
import Data.Map (Map)
import qualified Data.Map as M
import Data.Monoid (Monoid, mappend, mempty)
import Data.Set (Set)
@ -97,15 +98,26 @@ runRules rules provider = do
(_, _, ruleSet) <- runRWST (unRules rules) env emptyRulesState
-- Ensure compiler uniqueness
let ruleSet' = ruleSet
{ rulesCompilers = M.toList $
M.fromListWith (flip const) (rulesCompilers ruleSet)
}
uniqueCompilers <- case fromListUnique (rulesCompilers ruleSet) of
Right m -> return m
Left id' -> error $
"Hakyll.Core.Rules.Internal.runRules: duplicate compiler for " ++
show id'
return ruleSet'
return ruleSet {rulesCompilers = M.toList uniqueCompilers}
where
env = RulesRead
{ rulesProvider = provider
, rulesMatches = []
, rulesVersion = Nothing
}
--------------------------------------------------------------------------------
fromListUnique :: Ord k => [(k, v)] -> Either k (Map k v)
fromListUnique = go M.empty
where
go m [] = Right m
go m ((k, v) : zs) = case M.lookup k m of
Nothing -> go (M.insert k v m) zs
Just _ -> Left k

View file

@ -53,7 +53,8 @@ run config verbosity rules = do
provider <- newProvider store (shouldIgnoreFile config) $
providerDirectory config
Logger.message logger "Running rules..."
ruleSet <- runRules rules provider
Logger.flush logger
ruleSet <- runRules rules provider
-- Get old facts
mOldFacts <- Store.get store factsKey