@@ -24,7 +24,7 @@ module GHRB.Core
2424 , updateInstalled
2525 ) where
2626
27- import Control.Applicative (many , optional , (<|>) )
27+ import Control.Applicative (many , optional , some , (<|>) )
2828import Control.Monad (void )
2929import qualified Data.ByteString as BS (ByteString )
3030import qualified Data.ByteString.Char8 as BS (pack )
@@ -42,10 +42,10 @@ import Distribution.Portage.Types (Category (Category),
4242 getVersion , unwrapCategory ,
4343 unwrapPkgName )
4444import FlatParse.Basic (Parser , Result (OK ), char , eof ,
45- runParser , satisfy , string ) -- , anyChar
45+ runParser , satisfy , string )
4646import GHRB.Core.Types (PackageSet , St (St ), completed ,
47- downgrade , failed ,
48- tried , unresolved , untried , installed )
47+ downgrade , failed , installed ,
48+ tried , unresolved , untried )
4949
5050buildEmptyState :: St
5151buildEmptyState = St mempty mempty mempty mempty mempty mempty mempty undefined
@@ -59,24 +59,14 @@ parsePackageList packageList =
5959parsePackages :: Parser Void PackageSet
6060parsePackages = parsePackage <|> (eof >> return mempty )
6161
62- -- stripANSI :: (Char -> Bool) -> Parser Void String
63- -- stripANSI terminator = parseANSI terminator <|> (satisfy terminator >> pure "") <|> parseChar terminator
64- --
65- -- parseChar :: (Char -> Bool) -> Parser Void String
66- -- parseChar terminator = anyChar >>= \c -> (c :) <$> stripANSI terminator
67- --
68- -- parseANSI :: (Char -> Bool) -> Parser Void String
69- -- parseANSI terminator = do
70- -- $(string "\\[ESC")
71- -- void $ many (satisfy (/= 'm'))
72- -- $(char 'm')
73- -- stripANSI terminator
74- --
62+ parseANSI :: Parser Void ()
63+ parseANSI = $ (string " \ESC [" ) >> many (satisfy (/= ' m' )) >> $ (char ' m' )
64+
7565parsePackage :: Parser Void PackageSet
7666parsePackage = do
7767 category <- many (satisfy (/= ' /' ))
7868 $ (char ' /' )
79- name <- many (satisfy (/= ' \n ' ))
69+ name <- many (satisfy (/= ' \n ' ))
8070 void . optional $ $ (char ' \n ' )
8171 Set. insert
8272 Package
@@ -93,10 +83,12 @@ parseDowngrades = runParser parseDowngradeByLine
9383
9484parseDowngradeByLine :: Parser Void Bool
9585parseDowngradeByLine =
96- ($ (string " [ebuild" )
97- >> satisfy (`notElem` " ^\\ []D" )
86+ ($ (char ' [' )
87+ >> some parseANSI
88+ >> $ (string " ebuild" )
89+ >> many (parseANSI <|> void (satisfy (`notElem` " D[]" )))
9890 >> $ (char ' D' )
99- >> satisfy (`notElem` " ^ \\ [] " )
91+ >> many (parseANSI <|> void ( satisfy (`notElem` " [] \n " )) )
10092 >> $ (char ' ]' )
10193 >> pure True )
10294 <|> (many (satisfy (/= ' \n ' )) >> $ (char ' \n ' ) >> parseDowngradeByLine)
@@ -123,16 +115,13 @@ getUntried packages st = st {untried = packages'}
123115 packages' = filter (\ p -> not (p `Set.member` tried st)) packages
124116
125117failedResolve :: UTCTime -> Package -> St -> St
126- failedResolve t p st =
127- st {unresolved = Set. insert (t, p) . unresolved $ st}
118+ failedResolve t p st = st {unresolved = Set. insert (t, p) . unresolved $ st}
128119
129120hasDowngraded :: UTCTime -> Package -> St -> St
130- hasDowngraded t p st =
131- st {downgrade = Set. insert (t, p) . downgrade $ st}
121+ hasDowngraded t p st = st {downgrade = Set. insert (t, p) . downgrade $ st}
132122
133123hasCompleted :: UTCTime -> Package -> St -> St
134- hasCompleted t p st =
135- st {completed = Set. insert (t, p) . completed $ st}
124+ hasCompleted t p st = st {completed = Set. insert (t, p) . completed $ st}
136125
137126hasFailed :: UTCTime -> Package -> St -> St
138127hasFailed t p st = st {failed = Set. insert (t, p) . failed $ st}
@@ -144,4 +133,5 @@ updateInstalled :: UTCTime -> [Package] -> PackageSet -> St -> St
144133updateInstalled time ps inst st = st'
145134 where
146135 (comp, untried') = partition (`Set.member` inst) ps
147- st' = foldr (hasCompleted time) st {untried = untried', installed= inst} comp
136+ st' =
137+ foldr (hasCompleted time) st {untried = untried', installed = inst} comp
0 commit comments