Skip to content

Commit 86b3220

Browse files
mmhatblackheaven
authored andcommitted
Removed parseVersionRange from library
1 parent 661e9a6 commit 86b3220

File tree

4 files changed

+28
-27
lines changed

4 files changed

+28
-27
lines changed

code/hsec-tools/app/Main.hs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import Data.Maybe (fromMaybe)
99
import Data.Foldable (for_)
1010
import Data.Functor ((<&>))
1111
import Data.List (intercalate, isPrefixOf)
12+
import Distribution.Parsec (eitherParsec)
13+
import Distribution.Types.VersionRange (VersionRange, anyVersion)
1214
import System.Exit (die, exitFailure, exitSuccess)
1315
import System.IO (hPutStrLn, stderr)
1416
import System.FilePath (takeBaseName)
@@ -21,7 +23,7 @@ import Options.Applicative
2123
import Security.Advisories
2224
import qualified Security.Advisories.Convert.OSV as OSV
2325
import Security.Advisories.Git
24-
import Security.Advisories.Queries (listVersionRangeAffectedBy, parseVersionRange)
26+
import Security.Advisories.Queries (listVersionRangeAffectedBy)
2527
import Security.Advisories.Generate.HTML
2628

2729
import qualified Command.Reserve
@@ -109,24 +111,20 @@ commandQuery =
109111
isAffected =
110112
go
111113
<$> argument str (metavar "PACKAGE")
112-
<*> optional (option str (metavar "VERSION-SPEC" <> short 'v' <> long "version-spec"))
114+
<*> optional (option versionRangeReader (metavar "VERSION-RANGE" <> short 'v' <> long "version-range"))
113115
<*> optional (option str (metavar "ADVISORIES-PATH" <> short 'p' <> long "advisories-path"))
114116
<**> helper
115-
where go :: T.Text -> Maybe T.Text -> Maybe FilePath -> IO ()
116-
go packageName versionRange advisoriesPath =
117-
case parseVersionRange versionRange of
118-
Left e -> do
119-
T.hPutStrLn stderr $ "Cannot parse '--version-spec': " <> e
117+
where go :: T.Text -> Maybe VersionRange -> Maybe FilePath -> IO ()
118+
go packageName versionRange advisoriesPath = do
119+
let versionRange' = fromMaybe anyVersion versionRange
120+
affectedAdvisories <- listVersionRangeAffectedBy (fromMaybe "." advisoriesPath) packageName versionRange'
121+
case affectedAdvisories of
122+
[] -> putStrLn "Not affected"
123+
_ -> do
124+
hPutStrLn stderr "Affected by:"
125+
forM_ affectedAdvisories $ \advisory ->
126+
T.hPutStrLn stderr $ "* [" <> T.pack (printHsecId $ advisoryId advisory) <> "] " <> advisorySummary advisory
120127
exitFailure
121-
Right versionRange' -> do
122-
affectedAdvisories <- listVersionRangeAffectedBy (fromMaybe "." advisoriesPath) packageName versionRange'
123-
case affectedAdvisories of
124-
[] -> putStrLn "Not affected"
125-
_ -> do
126-
hPutStrLn stderr "Affected by:"
127-
forM_ affectedAdvisories $ \advisory ->
128-
T.hPutStrLn stderr $ "* [" <> T.pack (printHsecId $ advisoryId advisory) <> "] " <> advisorySummary advisory
129-
exitFailure
130128

131129
commandGenerateIndex :: Parser (IO ())
132130
commandGenerateIndex =
@@ -147,6 +145,9 @@ commandHelp =
147145
<$> optional (argument str (metavar "COMMAND"))
148146
<**> helper
149147

148+
versionRangeReader :: ReadM VersionRange
149+
versionRangeReader = eitherReader eitherParsec
150+
150151
withAdvisory :: (Maybe FilePath -> Advisory -> IO ()) -> Maybe FilePath -> IO ()
151152
withAdvisory go file = do
152153
input <- maybe T.getContents T.readFile file

code/hsec-tools/hsec-tools.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ executable hsec-tools
8383
, aeson >=2.0.1.0 && <3
8484
, base >=4.14 && <4.19
8585
, bytestring >=0.10 && <0.12
86+
, Cabal-syntax >=3.8.1.0 && <3.11
8687
, filepath >=1.4 && <1.5
8788
, hsec-tools
8889
, optparse-applicative >=0.17 && <0.19

code/hsec-tools/src/Security/Advisories/Queries.hs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,15 @@ module Security.Advisories.Queries
66
, listVersionRangeAffectedBy
77
, isVersionAffectedBy
88
, isVersionRangeAffectedBy
9-
, parseVersionRange
109
)
1110
where
1211

1312
import Control.Monad (forM_)
14-
import Data.Bifunctor (first)
1513
import System.Exit (exitFailure)
1614
import System.IO (stderr, hPrint)
1715

1816
import Data.Text (Text)
19-
import qualified Data.Text as T
2017
import qualified Data.Text.IO as T
21-
import Distribution.Parsec (eitherParsec)
2218
import Distribution.Types.Version (Version)
2319
import Distribution.Types.VersionInterval (asVersionIntervals)
2420
import Distribution.Types.VersionRange (VersionRange, anyVersion, earlierVersion, intersectVersionRanges, noVersion, orLaterVersion, unionVersionRanges, withinRange)
@@ -79,7 +75,3 @@ listAffectedByHelper checkAffectedBy root queryPackageName queryVersionish =
7975
exitFailure
8076
Success advisories ->
8177
return $ filter (checkAffectedBy queryPackageName queryVersionish) advisories
82-
83-
-- | Parse 'VersionRange' as given to the CLI
84-
parseVersionRange :: Maybe Text -> Either Text VersionRange
85-
parseVersionRange = maybe (return anyVersion) (first T.pack . eitherParsec . T.unpack)

code/hsec-tools/test/Spec/QueriesSpec.hs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,19 @@
33

44
module Spec.QueriesSpec (spec) where
55

6+
import Data.Bifunctor (first)
7+
import Data.Maybe (fromMaybe)
68
import Data.Text (Text)
7-
import Distribution.Types.VersionRange (VersionRange, VersionRangeF(..), projectVersionRange)
9+
import qualified Data.Text as T
10+
import Distribution.Parsec (eitherParsec)
11+
import Distribution.Types.Version (version0, alterVersion)
12+
import Distribution.Types.VersionRange (VersionRange, VersionRangeF(..), anyVersion, projectVersionRange)
813
import Test.Tasty
914
import Test.Tasty.HUnit
1015

1116
import Security.Advisories.Definition
1217
import Security.Advisories.HsecId
1318
import Security.Advisories.Queries
14-
import Distribution.Types.Version (version0, alterVersion)
15-
import Data.Maybe (fromMaybe)
1619

1720
spec :: TestTree
1821
spec =
@@ -180,3 +183,7 @@ mkAffectedVersions vr =
180183

181184
packageName :: Text
182185
packageName = "package-name"
186+
187+
-- | Parse 'VersionRange' as given to the CLI
188+
parseVersionRange :: Maybe Text -> Either Text VersionRange
189+
parseVersionRange = maybe (return anyVersion) (first T.pack . eitherParsec . T.unpack)

0 commit comments

Comments
 (0)