debian-build 0.5.0.0 → 0.5.0.1
raw patch · 2 files changed
+55/−38 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- debian-build.cabal +1/−1
- src/Debian/Package/Data/Source.hs +54/−37
debian-build.cabal view
@@ -1,5 +1,5 @@ name: debian-build-version: 0.5.0.0+version: 0.5.0.1 synopsis: Debian package build sequence tools description: This package provides build sequence functions for debian package, and includes on-the-fly
src/Debian/Package/Data/Source.hs view
@@ -24,15 +24,12 @@ ) where import Control.Arrow (second)-import Control.Applicative ((<$>), pure, (<*>), (<|>))-import Control.Monad.Trans.State (StateT, runStateT)-import Control.Monad.Trans.Class (lift)-import Numeric (readDec)-import Data.Maybe (listToMaybe)-import Data.Char (isSpace)-import Data.Version (Version (Version, versionBranch), showVersion, parseVersion)+import Control.Applicative ((<$>), pure, (<*>), (*>), empty, (<|>), many, some, optional)+import Control.Monad.Trans.State (StateT, runStateT, get, put)+import Data.Maybe (listToMaybe, maybeToList)+import Data.Char (isSpace, isDigit)+import Data.Version (Version (Version, versionBranch), showVersion) import Data.List.Split (splitOn)-import Text.ParserCombinators.ReadP (ReadP, string, readP_to_S, readS_to_P) import System.FilePath ((<.>), takeFileName, splitExtension) import Debian.Package.Data.Hackage@@ -40,14 +37,43 @@ Hackage, mkHackageDefault, NameRule (Simple), debianNamesFromSourceName) --- For base-4.5.0.0 - debian wheezy, portability trick.--- Monad m ==> Applicative (StateT s m)-type Parser = StateT () ReadP+type Parser = StateT String Maybe -runParser :: Parser a -> String -> [(a, String)]-runParser p in0 = [ (x, in1) | ((x, ()), in1) <- readP_to_S (runStateT p ()) in0 ]+satisfy :: (Char -> Bool) -> Parser Char+satisfy p = do+ s <- get+ case s of+ c:cs -> if p c+ then put cs *> pure c+ else empty+ [] -> empty +char :: Char -> Parser Char+char x = satisfy (== x) +_look :: Parser String+_look = get++_eof :: Parser ()+_eof = do+ s <- get+ case s of+ [] -> pure ()+ _:_ -> empty++runParser :: Parser a -> String -> Maybe (a, String)+runParser = runStateT++digit :: Parser Char+digit = satisfy isDigit++int :: Parser Int+int = read <$> some digit++string' :: String -> Parser String+string' = mapM char++ -- | Version type for Debian data DebianVersion = DebianNative Version (Maybe Int)@@ -78,31 +104,22 @@ d (DebianNative _ _) = True d (DebianNonNative _ _) = False -lexWord :: String -> [(String, String)]-lexWord = (:[]) . break isSpace . dropWhile isSpace--returnParsed :: Parser a -> String -> Parser a-returnParsed p s = case [ x | (x, "") <- runParser p s ] of- [x] -> return x- [] -> fail "ReadP: no parse"- _ -> fail "ReadP: ambiguous parse"--returnParsedVersion :: String -> Parser Version-returnParsedVersion = returnParsed $ lift parseVersion+parseVersion' :: Parser Version+parseVersion' =+ Version+ <$> ((:) <$> int <*> many (char '.' *> int))+ <*> pure [] -returnParsedNMU :: String -> Parser (Maybe Int)-returnParsedNMU = returnParsed $- Just <$> lift (string "+nmu" >> readS_to_P readDec) <|>- pure Nothing+parseDebianVersion' :: Parser DebianVersion+parseDebianVersion' = do+ v <- parseVersion'+ (DebianNonNative v <$> (char '-' *> some (satisfy (not . isSpace)))+ <|>+ DebianNative v <$> optional (string' "+nmu" *> int)) -parseDebianVersion :: Parser DebianVersion-parseDebianVersion = do- vs0 <- lift $ readS_to_P lexWord- let (vs1, rtag) = break (== '-') vs0- (vs2, nmu) = break (== '+') vs1- if rtag == ""- then DebianNative <$> returnParsedVersion vs2 <*> returnParsedNMU nmu- else DebianNonNative <$> returnParsedVersion vs1 <*> return (tail rtag)+_testParseDebianVersion :: [Maybe (DebianVersion, String)]+_testParseDebianVersion =+ [ runParser parseDebianVersion' s | s <- [ "1.23.3-4", "1.23", "12.3+nmu2" ] ] instance Show DebianVersion where show = d where@@ -110,7 +127,7 @@ d (DebianNonNative v r) = showVersion v ++ '-': r instance Read DebianVersion where- readsPrec _ = runParser parseDebianVersion+ readsPrec _ = maybeToList . runParser parseDebianVersion' readMaybe' :: Read a => String -> Maybe a readMaybe' = fmap fst . listToMaybe . filter ((== "") . snd) . reads