@@ -1,7 +1,8 @@
11--------------------------------------------------------------------------------
22{-# LANGUAGE OverloadedStrings #-}
33module Hakyll.Check
4− ( check
4+ ( Check (..)
5+ , check
56 ) where
67
78
@@ -37,9 +38,14 @@ import Hakyll.Web.Html
3738
3839
3940--------------------------------------------------------------------------------
40−check :: Configuration -> Verbosity -> IO ExitCode
41−check config verbosity = do
42− ((), write) <- runChecker checkDestination config verbosity
41+data Check = All | InternalLinks
42+ deriving (Eq, Ord, Show)
43+
44+
45+--------------------------------------------------------------------------------
46+check :: Configuration -> Verbosity -> Check -> IO ExitCode
47+check config verbosity check' = do
48+ ((), write) <- runChecker checkDestination config verbosity check'
4349 return $ if checkerFaulty write >= 0 then ExitFailure 1 else ExitSuccess
4450
4551
@@ -47,6 +53,7 @@ check config verbosity = do
4753data CheckerRead = CheckerRead
4854 { checkerConfig :: Configuration
4955 , checkerLogger :: Logger
56+ , checkerCheck :: Check
5057 }
5158
5259
@@ -73,10 +80,11 @@ type Checker a = RWST CheckerRead CheckerWrite CheckerState IO a
7380
7481
7582--------------------------------------------------------------------------------
76−runChecker :: Checker a -> Configuration -> Verbosity -> IO (a, CheckerWrite)
77−runChecker checker config verbosity = do
83+runChecker :: Checker a -> Configuration -> Verbosity -> Check
84+ -> IO (a, CheckerWrite)
85+runChecker checker config verbosity check' = do
7886 logger <- Logger.new verbosity
79− let read' = CheckerRead config logger
87+ let read' = CheckerRead config logger check'
8088 (x, _, write) <- runRWST checker read' S.empty
8189 Logger.flush logger
8290 return (x, write)
@@ -146,10 +154,11 @@ checkInternalUrl base url = case url' of
146154--------------------------------------------------------------------------------
147155checkExternalUrl :: String -> Checker ()
148156checkExternalUrl url = do
149− logger <- checkerLogger <$> ask
150− checked <- (url `S.member`) <$> get
157+ logger <- checkerLogger <$> ask
158+ needsCheck <- (== All) . checkerCheck <$> ask
159+ checked <- (url `S.member`) <$> get
151160
152− if checked
161+ if not needsCheck || checked
153162 then Logger.debug logger "Already checked, skipping"
154163 else do
155164 isOk <- liftIO $ handle (failure logger) $