Skip to content

Commit 9cbd859

Browse files
add colours to emerge and haskell-updater outputs
1 parent 6b1a004 commit 9cbd859

File tree

3 files changed

+26
-18
lines changed

3 files changed

+26
-18
lines changed

src/GHRB/Core.hs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module GHRB.Core
2525
) where
2626

2727
import Control.Applicative (many, optional, (<|>))
28-
import Control.Monad (void)
28+
import Control.Monad (void, unless)
2929
import qualified Data.ByteString as BS (ByteString)
3030
import qualified Data.ByteString.Char8 as BS (pack)
3131
import qualified Data.HashSet as Set (insert, member)
@@ -42,7 +42,8 @@ import Distribution.Portage.Types (Category (Category),
4242
getVersion, unwrapCategory,
4343
unwrapPkgName)
4444
import FlatParse.Basic (Parser, Result (OK), char, eof,
45-
runParser, satisfy, string)
45+
runParser, satisfy, string, anyChar)
46+
import qualified FlatParse.Basic as FP (failed)
4647
import GHRB.Core.Types (PackageSet, St (St), completed,
4748
downgrade, failed,
4849
tried, unresolved, untried, installed)
@@ -59,11 +60,24 @@ parsePackageList packageList =
5960
parsePackages :: Parser Void PackageSet
6061
parsePackages = parsePackage <|> (eof >> return mempty)
6162

63+
stripANSI :: (Char -> Bool) -> Parser Void String
64+
stripANSI terminator = parseANSI terminator <|> (satisfy terminator >> pure "") <|> parseChar terminator
65+
66+
parseChar :: (Char -> Bool) -> Parser Void String
67+
parseChar terminator = anyChar >>= \c -> (c :) <$> stripANSI terminator
68+
69+
parseANSI :: (Char -> Bool) -> Parser Void String
70+
parseANSI terminator = do
71+
$(string "\\[ESC")
72+
void $ many (satisfy (/= 'm'))
73+
$(char 'm')
74+
stripANSI terminator
75+
6276
parsePackage :: Parser Void PackageSet
6377
parsePackage = do
6478
category <- many (satisfy (/= '/'))
6579
$(char '/')
66-
name <- many (satisfy (/= '\n'))
80+
name <- many (satisfy (/= '\n'))
6781
void . optional $ $(char '\n')
6882
Set.insert
6983
Package
@@ -81,9 +95,9 @@ parseDowngrades = runParser parseDowngradeByLine
8195
parseDowngradeByLine :: Parser Void Bool
8296
parseDowngradeByLine =
8397
($(string "[ebuild")
84-
>> many (satisfy (`notElem` "^\\[]D"))
98+
>> stripANSI (`elem` "^\\[]D")
8599
>> $(char 'D')
86-
>> many (satisfy (`notElem` "^\\[]"))
100+
>> stripANSI (`elem` "^\\[]")
87101
>> $(char ']')
88102
>> pure True)
89103
<|> (many (satisfy (/= '\n')) >> $(char '\n') >> parseDowngradeByLine)

src/GHRB/IO.hs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ import GHRB.IO.Cmd (defaultEmergeArgs,
4646
defaultPqueryArgs,
4747
installedArgs, repo,
4848
runTransparent)
49-
import GHRB.IO.Utils (bStderr, logOutput, stderr,
50-
stdout, bStdout)
49+
import GHRB.IO.Utils (bStderr, bStdout, logOutput,
50+
stderr, stdout)
5151
import System.Exit (ExitCode (ExitFailure, ExitSuccess))
5252

5353
tmpLogRoot :: String
@@ -171,7 +171,7 @@ install ::
171171
install = do
172172
pkg <- gets package
173173
bStderr . prettyMessage $ "Preliminary emerge run succeeded..."
174-
(exitCode, _, _) <- runEmerge ["--keep-going=y"] pkg
174+
(exitCode, _, _) <- runEmerge ["--keep-going=y", "--color=n"] pkg
175175
time <- currentTime
176176
let result =
177177
if exitCode == ExitSuccess
@@ -232,7 +232,7 @@ totalStats = do
232232
let is = Set.size . Set.intersection total $ inst
233233
ts = Set.size total
234234
pc = (100 * is) `div` ts
235-
pure
235+
pure
236236
$ show is
237237
++ " installed out of "
238238
++ show ts
@@ -255,13 +255,8 @@ capturePortageOutput ::
255255
-> Eff es (ExitCode, String)
256256
capturePortageOutput pkg = do
257257
emerge <- asks getEmerge
258-
stderr
259-
(emerge
260-
++ " "
261-
++ unwords defaultEmergeArgs
262-
++ " "
263-
++ "--pretend")
264-
(exitCode, stdOut, stdErr) <- runEmerge ["--pretend"] pkg
258+
stderr (emerge ++ " " ++ unwords defaultEmergeArgs ++ " " ++ "--pretend --color=y")
259+
(exitCode, stdOut, stdErr) <- runEmerge ["--pretend", "--color=y"] pkg
265260
let output = stdOut ++ stdErr
266261
stderr ("pretend_return: " ++ output)
267262
pure (exitCode, output)

src/GHRB/IO/Cmd.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ defaultEmergeArgs =
3939
, "--complete-graph"
4040
, "--oneshot"
4141
, "--update"
42-
, "--color=n" -- Need a ANSI filtering library
4342
, "--nospinner"
4443
]
4544

@@ -52,7 +51,7 @@ defaultHUArgs =
5251
, "--ignore-default-opts"
5352
, "--verbose"
5453
, "--quiet-build"
55-
, "--color=n" -- Need a ANSI filtering library
54+
, "--color=y"
5655
, "--nospinner"
5756
]
5857

0 commit comments

Comments
 (0)