Throw an error in case of duplicate compilers
This commit is contained in:
parent
5e70351a40
commit
ffbce96607
2 changed files with 19 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue