propellor-5.6.0: src/Utility/Directory/TestDirectory.hs
{- testing properties of directories
-
- Copyright 2011-2018 Joey Hess <id@joeyh.name>
-
- License: BSD-2-clause
-}
module Utility.Directory.TestDirectory where
import Utility.Directory
import Utility.Directory.Stream
import Utility.Exception
-- | True only when directory exists and contains nothing.
-- Throws exception if directory does not exist.
isDirectoryEmpty :: FilePath -> IO Bool
isDirectoryEmpty d = testDirectory d dirCruft
-- | True if the directory does not exist or contains nothing.
-- Ignores "lost+found" which can exist in an empty filesystem.
isUnpopulated :: FilePath -> IO Bool
isUnpopulated d = catchDefaultIO True $ testDirectory d fsCruft
fsCruft :: FilePath -> Bool
fsCruft "lost+found" = True
fsCruft d = dirCruft d
-- | Run test on entries found in directory, return False as soon as the
-- test returns False, else return True. Throws exception if directory does
-- not exist.
testDirectory :: FilePath -> (FilePath -> Bool) -> IO Bool
testDirectory d test = bracket (openDirectory d) closeDirectory check
where
check h = do
v <- readDirectory h
case v of
Nothing -> return True
Just f
| not (test f) -> return False
| otherwise -> check h