@@ -9,6 +9,8 @@ import Data.Maybe (fromMaybe)
9
9
import Data.Foldable (for_ )
10
10
import Data.Functor ((<&>) )
11
11
import Data.List (intercalate , isPrefixOf )
12
+ import Distribution.Parsec (eitherParsec )
13
+ import Distribution.Types.VersionRange (VersionRange , anyVersion )
12
14
import System.Exit (die , exitFailure , exitSuccess )
13
15
import System.IO (hPutStrLn , stderr )
14
16
import System.FilePath (takeBaseName )
@@ -21,7 +23,7 @@ import Options.Applicative
21
23
import Security.Advisories
22
24
import qualified Security.Advisories.Convert.OSV as OSV
23
25
import Security.Advisories.Git
24
- import Security.Advisories.Queries (listVersionRangeAffectedBy , parseVersionRange )
26
+ import Security.Advisories.Queries (listVersionRangeAffectedBy )
25
27
import Security.Advisories.Generate.HTML
26
28
27
29
import qualified Command.Reserve
@@ -109,24 +111,20 @@ commandQuery =
109
111
isAffected =
110
112
go
111
113
<$> 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 " ))
113
115
<*> optional (option str (metavar " ADVISORIES-PATH" <> short ' p' <> long " advisories-path" ))
114
116
<**> 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
120
127
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
130
128
131
129
commandGenerateIndex :: Parser (IO () )
132
130
commandGenerateIndex =
@@ -147,6 +145,9 @@ commandHelp =
147
145
<$> optional (argument str (metavar " COMMAND" ))
148
146
<**> helper
149
147
148
+ versionRangeReader :: ReadM VersionRange
149
+ versionRangeReader = eitherReader eitherParsec
150
+
150
151
withAdvisory :: (Maybe FilePath -> Advisory -> IO () ) -> Maybe FilePath -> IO ()
151
152
withAdvisory go file = do
152
153
input <- maybe T. getContents T. readFile file
0 commit comments