diff options
author | Ian Lynagh <igloo@earth.li> | 2010-05-08 20:20:06 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2010-05-08 20:20:06 +0000 |
commit | 09c1e44100162eaced8db4468f2bc4e99d4b1595 (patch) | |
tree | e8a7d365d3026da5d651259612469b17cedc33dd /utils | |
parent | a112e271063af6de659bee2f1b6a7c39d8792d98 (diff) | |
download | haskell-09c1e44100162eaced8db4468f2bc4e99d4b1595.tar.gz |
Optimise checkremove a bit
Diffstat (limited to 'utils')
-rw-r--r-- | utils/testremove/checkremove.hs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/utils/testremove/checkremove.hs b/utils/testremove/checkremove.hs index 5a948b896f..54745122c4 100644 --- a/utils/testremove/checkremove.hs +++ b/utils/testremove/checkremove.hs @@ -3,6 +3,8 @@ module Main (main) where import Control.Monad import Data.List +import qualified Data.Set as Set +import Data.Set (Set) import System.Environment import System.Exit import System.FilePath @@ -20,20 +22,23 @@ main = do args <- getArgs _ -> error "Bad args" +readSet :: FilePath -> IO (Set FilePath) +readSet fp = liftM (Set.fromList . lines) $ readFile fp + doit :: FilePath -> FilePath -> FilePath -> IO () doit contentsBeforeFile contentsAfterFile wouldBeCleanedFile - = do contentsBefore <- liftM lines $ readFile contentsBeforeFile - contentsAfter <- liftM lines $ readFile contentsAfterFile + = do contentsBefore <- readSet contentsBeforeFile + contentsAfter <- readSet contentsAfterFile wouldBeCleaned <- liftM (map read . lines) $ readFile wouldBeCleanedFile - let newContentsAfter = contentsAfter \\ contentsBefore + let newContentsAfter = contentsAfter `Set.difference` contentsBefore let cleanedAfter = simulateCleans newContentsAfter wouldBeCleaned - unless (null cleanedAfter) $ do + unless (Set.null cleanedAfter) $ do hPutStrLn stderr "Files not cleaned:" - mapM_ (hPutStrLn stderr . show) cleanedAfter + mapM_ (hPutStrLn stderr . show) (Set.toList cleanedAfter) exitWith (ExitFailure 1) -simulateCleans :: [FilePath] -> [CleanWhat] -> [FilePath] -simulateCleans fs cws = filter (not . cleaned) fs +simulateCleans :: Set FilePath -> [CleanWhat] -> Set FilePath +simulateCleans fs cws = Set.filter (not . cleaned) fs where cleaned f = any (`willClean` f) cws willClean :: CleanWhat -> FilePath -> Bool |