summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2010-05-08 20:20:06 +0000
committerIan Lynagh <igloo@earth.li>2010-05-08 20:20:06 +0000
commit09c1e44100162eaced8db4468f2bc4e99d4b1595 (patch)
treee8a7d365d3026da5d651259612469b17cedc33dd /utils
parenta112e271063af6de659bee2f1b6a7c39d8792d98 (diff)
downloadhaskell-09c1e44100162eaced8db4468f2bc4e99d4b1595.tar.gz
Optimise checkremove a bit
Diffstat (limited to 'utils')
-rw-r--r--utils/testremove/checkremove.hs19
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