@@ -82,34 +82,43 @@ checkFile filePath = do
8282 contents <- liftIO $ readFile filePath
8383 Logger.header logger $ "Checking " ++ filePath
8484
85− let tags = TS.parseTags contents
86− -- Lots of logic here...
87− urls = filter (not . null) $
88− map stripFragments $
89− filter (not . isExternal) $
90− getUrls tags
85+ let urls = getUrls $ TS.parseTags contents
86+ forM_ urls $ \url ->
87+ if isExternal url
88+ then checkExternalUrl url
89+ else checkInternalUrl filePath url
9190
92− mapM_ (checkUrl filePath) urls
91+
92+--------------------------------------------------------------------------------
93+checkInternalUrl :: FilePath -> String -> Checker ()
94+checkInternalUrl base url = case url' of
95+ "" -> tell $ mempty {checkerOk = 1}
96+ _ -> do
97+ logger <- checkerLogger <$> ask
98+ config <- checkerConfig <$> ask
99+
100+ let dest = destinationDirectory config
101+ dir = takeDirectory base
102+ filePath
103+ | "/" `isPrefixOf` url' = dest ++ url'
104+ | otherwise = dir </> url'
105+
106+ exists <- checkFileExists filePath
107+ if exists
108+ then tell $ mempty {checkerOk = 1}
109+ else do
110+ tell $ mempty {checkerFaulty = 1}
111+ Logger.error logger $ base ++ ": broken link to " ++ show url
112+ where
113+ url' = stripFragments url
93114
94115
95116--------------------------------------------------------------------------------
96−checkUrl :: FilePath -> String -> Checker ()
97−checkUrl base url = do
117+checkExternalUrl :: String -> Checker ()
118+checkExternalUrl url = do
98119 logger <- checkerLogger <$> ask
99− config <- checkerConfig <$> ask
100−
101− let dest = destinationDirectory config
102− dir = takeDirectory base
103− filePath
104− | "/" `isPrefixOf` url = dest ++ url
105− | otherwise = dir </> url
106−
107− exists <- checkFileExists filePath
108− if exists
109− then tell $ mempty {checkerOk = 1}
110− else do
111− tell $ mempty {checkerFaulty = 1}
112− Logger.error logger $ base ++ ": broken reference to " ++ show url
120+ Logger.message logger $ "Not checking external url " ++ url
121+ -- TODO: use http-conduit and a cache?
113122
114123
115124--------------------------------------------------------------------------------