{- testing properties of directories - - Copyright 2011-2018 Joey Hess - - 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