summaryrefslogtreecommitdiff
path: root/src/Utility/Directory/TestDirectory.hs
diff options
context:
space:
mode:
authorJoey Hess2018-12-30 15:08:55 -0400
committerJoey Hess2018-12-30 15:08:55 -0400
commit3328fb83373adad786e57d4ed47e1d801e14260f (patch)
treef1e3502287f2cdd2bc19020f82b5a56ac90d0bbe /src/Utility/Directory/TestDirectory.hs
parent11b3e6c0017dadf64ea67a7ea8c98e78b0917256 (diff)
Merged Utility changes from git-annex
Last done in May 2017..
Diffstat (limited to 'src/Utility/Directory/TestDirectory.hs')
-rw-r--r--src/Utility/Directory/TestDirectory.hs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Utility/Directory/TestDirectory.hs b/src/Utility/Directory/TestDirectory.hs
new file mode 100644
index 00000000..e1f961b9
--- /dev/null
+++ b/src/Utility/Directory/TestDirectory.hs
@@ -0,0 +1,40 @@
+{- 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