diff options
author | Ian Lynagh <igloo@earth.li> | 2010-05-08 19:41:05 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2010-05-08 19:41:05 +0000 |
commit | cabb1ad4f8c7e48694ff17fbedd94e9bcf86d565 (patch) | |
tree | 0869cb478fe79b33e8c40af55ea4e9a4d88c18b0 /utils/testremove/checkremove.hs | |
parent | ee9a93fdb4e0830a27d87185d30bba6e2638e319 (diff) | |
download | haskell-cabb1ad4f8c7e48694ff17fbedd94e9bcf86d565.tar.gz |
Add tools to test that cleaning works properly
Diffstat (limited to 'utils/testremove/checkremove.hs')
-rw-r--r-- | utils/testremove/checkremove.hs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/utils/testremove/checkremove.hs b/utils/testremove/checkremove.hs new file mode 100644 index 0000000000..5a948b896f --- /dev/null +++ b/utils/testremove/checkremove.hs @@ -0,0 +1,43 @@ + +module Main (main) where + +import Control.Monad +import Data.List +import System.Environment +import System.Exit +import System.FilePath +import System.IO + +data CleanWhat = CleanFile FilePath + | CleanRec FilePath + deriving (Read, Show) + +main :: IO () +main = do args <- getArgs + case args of + [contentsBeforeFile, contentsAfterFile, wouldBeCleanedFile] -> + doit contentsBeforeFile contentsAfterFile wouldBeCleanedFile + _ -> + error "Bad args" + +doit :: FilePath -> FilePath -> FilePath -> IO () +doit contentsBeforeFile contentsAfterFile wouldBeCleanedFile + = do contentsBefore <- liftM lines $ readFile contentsBeforeFile + contentsAfter <- liftM lines $ readFile contentsAfterFile + wouldBeCleaned <- liftM (map read . lines) $ readFile wouldBeCleanedFile + let newContentsAfter = contentsAfter \\ contentsBefore + let cleanedAfter = simulateCleans newContentsAfter wouldBeCleaned + unless (null cleanedAfter) $ do + hPutStrLn stderr "Files not cleaned:" + mapM_ (hPutStrLn stderr . show) cleanedAfter + exitWith (ExitFailure 1) + +simulateCleans :: [FilePath] -> [CleanWhat] -> [FilePath] +simulateCleans fs cws = filter (not . cleaned) fs + where cleaned f = any (`willClean` f) cws + +willClean :: CleanWhat -> FilePath -> Bool +CleanFile fp `willClean` f = fp `equalFilePath` f +CleanRec fp `willClean` f + = any (fp `equalFilePath`) (map joinPath $ inits $ splitPath f) + |