Skip to content

Commit ea944d9

Browse files
frasertweedaleTristanCacqueray
authored andcommitted
tools/index: ignore symlinks to avoid duplicate entries
Advisories with multiple affected packages will be defined as a single file in the "lowest level" package directory, with inbound symbolic links of the same name in the other package directories. Update the generate-index command to ignore symbolic links. This prevents duplicate entries appearing in the lists/tables.
1 parent 5901f53 commit ea944d9

File tree

1 file changed

+10
-6
lines changed
  • code/hsec-tools/src/Security/Advisories/Generate

1 file changed

+10
-6
lines changed

code/hsec-tools/src/Security/Advisories/Generate/HTML.hs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module Security.Advisories.Generate.HTML
77
)
88
where
99

10-
import Control.Monad (forM_)
10+
import Control.Monad (filterM, forM_)
1111
import Control.Monad.Extra (mapMaybeM)
1212
import Data.Either.Extra (eitherToMaybe)
1313
import Data.Functor ((<&>))
@@ -22,17 +22,21 @@ import Lucid
2222
import Security.Advisories (AttributeOverridePolicy (NoOverrides), OutOfBandAttributes (..), emptyOutOfBandAttributes, parseAdvisory)
2323
import qualified Security.Advisories as Advisories
2424
import Security.Advisories.Git
25-
import System.Directory (createDirectoryIfMissing)
25+
import System.Directory (createDirectoryIfMissing, pathIsSymbolicLink)
2626
import System.Directory.Extra (listFilesRecursive)
2727
import System.FilePath (takeFileName, (</>))
2828

2929
-- * Actions
3030

3131
renderAdvisoriesIndex :: FilePath -> FilePath -> IO ()
3232
renderAdvisoriesIndex src dst = do
33-
let isAdvisory p =
34-
let fileName = takeFileName p
35-
in isPrefixOf "HSEC-" fileName && isSuffixOf ".md" fileName
33+
let okToLoad path = do
34+
isSym <- pathIsSymbolicLink path
35+
let fileName = takeFileName path
36+
pure $
37+
not isSym -- ignore symlinks (avoid duplicates entries in index)
38+
&& "HSEC-" `isPrefixOf` fileName
39+
&& ".md" `isSuffixOf` fileName
3640
readAdvisory path = do
3741
oob <-
3842
getAdvisoryGitInfo path <&> \case
@@ -44,7 +48,7 @@ renderAdvisoriesIndex src dst = do
4448
}
4549
fileContent <- T.readFile path
4650
return $ eitherToMaybe $ parseAdvisory NoOverrides oob fileContent
47-
advisoriesFileName <- filter isAdvisory <$> listFilesRecursive src
51+
advisoriesFileName <- listFilesRecursive src >>= filterM okToLoad
4852
advisories <- mapMaybeM readAdvisory advisoriesFileName
4953
let renderToFile' path content = do
5054
putStrLn $ "Rendering " <> path

0 commit comments

Comments
 (0)