1+ {-# LANGUAGE OverloadedStrings #-}
2+
13import qualified Distribution.ModuleName as ModuleName
24import Distribution.PackageDescription
3- import Distribution.PackageDescription.Parse
4- (ParseResult ( .. ), parseGenericPackageDescription )
5+ import Distribution.PackageDescription.Parsec
6+ (parseGenericPackageDescription , runParseResult )
57import Distribution.Verbosity (silent )
68
79import Control.Monad (liftM , filterM )
@@ -11,18 +13,22 @@ import System.Environment (getArgs, getProgName)
1113import System.FilePath ((</>) , takeDirectory , takeExtension , takeFileName )
1214import System.Process (readProcess )
1315
14- import qualified System.IO as IO
16+
17+ import qualified Data.ByteString as BS
18+ import qualified Data.ByteString.Char8 as BS8
19+ import qualified System.IO as IO
1520
1621main' :: FilePath -> IO ()
1722main' fp' = do
1823 fp <- canonicalizePath fp'
1924 setCurrentDirectory (takeDirectory fp)
2025
2126 -- Read cabal file, so we can determine test modules
22- contents <- strictReadFile fp
23- cabal <- case parseGenericPackageDescription contents of
24- ParseOk _ x -> pure x
25- ParseFailed errs -> fail (show errs)
27+ contents <- BS. readFile fp
28+ cabal <-
29+ case snd . runParseResult . parseGenericPackageDescription $ contents of
30+ Right x -> pure x
31+ Left (_mver, errs) -> fail (show errs)
2632
2733 -- We skip some files
2834 testModuleFiles <- getOtherModulesFiles cabal
@@ -40,13 +46,16 @@ main' fp' = do
4046 let files = files3
4147
4248 -- Read current file
43- let inputLines = lines contents
44- linesBefore = takeWhile (/= topLine) inputLines
45- linesAfter = dropWhile (/= bottomLine) inputLines
49+ let topLine' = BS8. pack topLine
50+ bottomLine' = BS8. pack bottomLine
51+ inputLines = BS8. lines contents
52+ linesBefore = takeWhile (/= topLine') inputLines
53+ linesAfter = dropWhile (/= bottomLine') inputLines
4654
4755 -- Output
48- let outputLines = linesBefore ++ [topLine] ++ map (" " ++ ) files ++ linesAfter
49- writeFile fp (unlines outputLines)
56+ let outputLines = linesBefore ++ [topLine']
57+ ++ map ((<>) " " . BS8. pack) files ++ linesAfter
58+ BS. writeFile fp (BS8. unlines outputLines)
5059
5160
5261topLine , bottomLine :: String
@@ -106,12 +115,3 @@ main = do
106115 putStrLn $ " Usage: " ++ progName ++ " FILE"
107116 putStrLn $ " where FILE is Cabal.cabal, cabal-testsuite.cabal, "
108117 ++ " or cabal-install.cabal"
109-
110- strictReadFile :: FilePath -> IO String
111- strictReadFile fp = do
112- handle <- IO. openFile fp IO. ReadMode
113- contents <- get handle
114- IO. hClose handle
115- return contents
116- where
117- get h = IO. hGetContents h >>= \ s -> length s `seq` return s
0 commit comments