From 09c1e44100162eaced8db4468f2bc4e99d4b1595 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Sat, 8 May 2010 20:20:06 +0000 Subject: [PATCH] Optimise checkremove a bit --- utils/testremove/checkremove.hs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/utils/testremove/checkremove.hs b/utils/testremove/checkremove.hs index 5a948b8..5474512 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 -- 1.7.10.4