summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-11-27 22:41:03 +0100
committerEugen Wissner <belka@caraus.de>2024-11-27 22:41:03 +0100
commit15cf346c612462dacefe73441b17b5a2524ce617 (patch)
tree723f9d7615124ecdf625c6329524bc4c0fd8317b
parent468852410e3881910d803192f13ed13f19a7af41 (diff)
downloadslackbuilder-15cf346c612462dacefe73441b17b5a2524ce617.tar.gz
Parse package names with a period
-rw-r--r--lib/SlackBuilder/Info.hs6
-rw-r--r--tests/SlackBuilder/InfoSpec.hs44
2 files changed, 48 insertions, 2 deletions
diff --git a/lib/SlackBuilder/Info.hs b/lib/SlackBuilder/Info.hs
index 59342cc..bf8f1f7 100644
--- a/lib/SlackBuilder/Info.hs
+++ b/lib/SlackBuilder/Info.hs
@@ -28,7 +28,7 @@ import Data.Void (Void)
import Data.Word (Word8)
import Numeric (readHex, showHex)
import Text.Megaparsec (Parsec, count, eof, parse, takeWhile1P)
-import Text.Megaparsec.Byte (space, string, hexDigitChar)
+import Text.Megaparsec.Byte (hspace1, space, string, hexDigitChar)
import Text.URI
( URI(..)
, parserBs
@@ -43,6 +43,7 @@ import SlackBuilder.Trans
import System.FilePath ((</>), (<.>))
import Control.Monad.IO.Class (MonadIO(..))
import Conduit (MonadThrow(throwM))
+import Control.Monad (void)
type GenParser = Parsec Void ByteString
@@ -66,7 +67,7 @@ variableEntry variable = string (Char8.append variable "=\"")
<* string "\"\n"
variableSeparator :: GenParser ()
-variableSeparator = string " \\" *> space
+variableSeparator = void $ some $ hspace1 <|> void (string "\\\n")
packageDownloads :: ByteString -> GenParser [URI]
packageDownloads variableName = string (variableName <> "=\"")
@@ -99,6 +100,7 @@ packageName = takeWhile1P Nothing isNameToken
isNameToken x = Word8.isAlphaNum x
|| x == Word8._hyphen
|| x == Word8._underscore
+ || x == Word8._period
parseInfoFile :: GenParser PackageInfo
parseInfoFile = PackageInfo . Char8.unpack
diff --git a/tests/SlackBuilder/InfoSpec.hs b/tests/SlackBuilder/InfoSpec.hs
index 8dd0097..769a45e 100644
--- a/tests/SlackBuilder/InfoSpec.hs
+++ b/tests/SlackBuilder/InfoSpec.hs
@@ -72,6 +72,50 @@ spec = do
it "accepts an empty downloads list" $
parseInfoFile' `shouldSucceedOn` infoDownload0
+ it "parses a package name with a dot" $
+ let given =
+ "PRGNAM=\"pkgnam.yaml\"\n\
+ \VERSION=\"1.2.3\"\n\
+ \HOMEPAGE=\"homepage\"\n\
+ \DOWNLOAD=\"https://dlackware.com/download.tar.gz\"\n\
+ \MD5SUM=\"0102030405060708090a0b0c0d0e0f10\"\n\
+ \DOWNLOAD_x86_64=\"\"\n\
+ \MD5SUM_x86_64=\"\"\n\
+ \REQUIRES=\"\"\n\
+ \MAINTAINER=\"Z\"\n\
+ \EMAIL=\"test@example.com\"\n"
+ in parseInfoFile' `shouldSucceedOn` given
+
+ it "parses to downloads in a single line" $
+ let given =
+ "PRGNAM=\"pkgnam.yaml\"\n\
+ \VERSION=\"1.2.3\"\n\
+ \HOMEPAGE=\"homepage\"\n\
+ \DOWNLOAD=\"https://dlackware.com/download1.tar.gz https://dlackware.com/download2.tar.gz\"\n\
+ \MD5SUM=\"0102030405060708090a0b0c0d0e0f10 0102030405060708090a0b0c0d0e0f11\"\n\
+ \DOWNLOAD_x86_64=\"\"\n\
+ \MD5SUM_x86_64=\"\"\n\
+ \REQUIRES=\"\"\n\
+ \MAINTAINER=\"Z\"\n\
+ \EMAIL=\"test@example.com\"\n"
+ in parseInfoFile' `shouldSucceedOn` given
+
+ it "parses downloads continuing on the next line" $
+ let given =
+ "PRGNAM=\"pkgnam.yaml\"\n\
+ \VERSION=\"1.2.3\"\n\
+ \HOMEPAGE=\"homepage\"\n\
+ \DOWNLOAD=\"https://dlackware.com/download1.tar.gz \\\n\
+ \ https://dlackware.com/download2.tar.gz\"\n\
+ \MD5SUM=\"0102030405060708090a0b0c0d0e0f10 \\\n\
+ \ 0102030405060708090a0b0c0d0e0f11\"\n\
+ \DOWNLOAD_x86_64=\"\"\n\
+ \MD5SUM_x86_64=\"\"\n\
+ \REQUIRES=\"\"\n\
+ \MAINTAINER=\"Z\"\n\
+ \EMAIL=\"test@example.com\"\n"
+ in parseInfoFile' `shouldSucceedOn` given
+
describe "generate" $ do
it "generates an .info file without downloads" $
let given = PackageInfo "pkgnam" "1.2.3" "homepage" [] [] [] [] [] "Z" "test@example.com"