diff options
| author | Eugen Wissner <belka@caraus.de> | 2023-10-04 22:36:19 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2023-10-04 22:36:19 +0200 |
| commit | 7b5598a02e0faff590d94391a8b323e6fe74a4fe (patch) | |
| tree | 2eb5184ba098603a9f23accab57994eacf5342d2 /lib/SlackBuilder | |
| parent | d5df676df7a9bea716fdbdaff455fa1ab57073ac (diff) | |
| download | slackbuilder-7b5598a02e0faff590d94391a8b323e6fe74a4fe.tar.gz | |
Validate the .info file
Diffstat (limited to 'lib/SlackBuilder')
| -rw-r--r-- | lib/SlackBuilder/Info.hs | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/lib/SlackBuilder/Info.hs b/lib/SlackBuilder/Info.hs index bedbc48..ed5957c 100644 --- a/lib/SlackBuilder/Info.hs +++ b/lib/SlackBuilder/Info.hs @@ -6,6 +6,7 @@ module SlackBuilder.Info , updateDownloadVersion ) where +import Control.Applicative (Alternative(..)) import Control.Monad.Combinators (sepBy) import qualified Data.ByteArray as ByteArray import Data.ByteString (ByteString) @@ -33,6 +34,7 @@ import Text.URI , render , unRText ) +import qualified Data.Word8 as Word8 type GenParser = Parsec Void ByteString @@ -42,6 +44,11 @@ data PackageInfo = PackageInfo , homepage :: Text , downloads :: [URI] , checksums :: [Digest MD5] + , downloadX64 :: [URI] + , checksumX64 :: [Digest MD5] + , requires :: [ByteString] + , maintainer :: Text + , email :: Text } deriving (Eq, Show) variableEntry :: ByteString -> GenParser ByteString @@ -52,8 +59,8 @@ variableEntry variable = string (Char8.append variable "=\"") variableSeparator :: GenParser () variableSeparator = string " \\" *> space -packageDownloads :: GenParser [URI] -packageDownloads = string "DOWNLOAD=\"" +packageDownloads :: ByteString -> GenParser [URI] +packageDownloads variableName = string (variableName <> "=\"") *> sepBy parserBs variableSeparator <* string "\"\n" @@ -65,19 +72,41 @@ hexDigit = packageChecksum :: GenParser ByteString packageChecksum = ByteString.pack <$> count 16 hexDigit -packageChecksums :: GenParser [ByteString] -packageChecksums = string "MD5SUM=\"" +packageChecksums :: ByteString -> GenParser [ByteString] +packageChecksums variableName = string (variableName <> "=\"") *> sepBy packageChecksum variableSeparator <* string "\"\n" +packageRequires :: GenParser [ByteString] +packageRequires = string "REQUIRES=\"" + *> sepBy packageName space + <* string "\"\n" + +packageName :: GenParser ByteString +packageName = takeWhile1P Nothing isNameToken + where + isNameToken x = Word8.isAlphaNum x + || x == Word8._hyphen + || x == Word8._underscore + parseInfoFile :: GenParser PackageInfo parseInfoFile = PackageInfo - <$> (Char8.unpack <$> variableEntry "PKGNAM") + <$> (Char8.unpack <$> packagePrgnam) <*> (Text.decodeUtf8 <$> variableEntry "VERSION") <*> (Text.decodeUtf8 <$> variableEntry "HOMEPAGE") - <*> packageDownloads - <*> (mapMaybe digestFromByteString <$> packageChecksums) + <*> packageDownloads "DOWNLOAD" + <*> (mapMaybe digestFromByteString <$> packageChecksums "MD5SUM") + <*> packageDownloads "DOWNLOAD_x86_64" + <*> (mapMaybe digestFromByteString <$> packageChecksums "MD5SUM_x86_64") + <*> packageRequires + <*> (Text.decodeUtf8 <$> variableEntry "MAINTAINER") + <*> (Text.decodeUtf8 <$> variableEntry "EMAIL") <* eof + where + packagePrgnam = (string "PKGNAM" <|> string "PRGNAM") + >> string "=\"" + *> packageName + <* "\"\n" updateDownloadVersion :: PackageInfo -> Text -> Maybe String -> [URI] updateDownloadVersion package toVersion gnomeVersion |
