filepattern-0.1.1: File path glob-like matching

System.FilePattern.Directory

Description

Optimised directory traversal using FilePattern values.

Case Sensitivity: these traversals are optimised to reduce the number of IO operations performed. In particular, if the relevant subdirectories can be determined in advance it will use doesDirectoryExist rather than getDirectoryContents. However, on case-insensitive file systems, if there is a directory foo, then doesDirectoryExist "FOO" will report True, but FOO won't be a result returned by getDirectoryContents, which may result in different search results depending on whether a certain optimisations kick in.

If these optimisation differences are absolutely unacceptable use getDirectoryFilesIgnoreSlow. However, normally these differences are not a problem.

Synopsis

# Documentation

Get the files below a certain root that match any of the FilePattern values. Only matches files, not directories. Avoids traversing into directories that it can detect won't have any matches in.

getDirectoryFiles "myproject/src" ["**/*.h","**/*.c"]

If there are certain directories/files that should not be explored, use getDirectoryFilesIgnore.

Warning: on case-insensitive file systems certain optimisations can cause surprising results. See the top of the module for details.

getDirectoryFilesIgnore :: FilePath -> [FilePattern] -> [FilePattern] -> IO [FilePath] Source #

Get the files below a certain root matching any of the first set of FilePattern values, but don't return any files which match any ignore pattern. Typically the ignore pattens will end with /**, e.g. .git/**.

Warning: on case-insensitive file systems certain optimisations can cause surprising results. See the top of the module for details.

Like getDirectoryFilesIgnore but that the optimisations that may change behaviour on a case-insensitive file system. Note that this function will never return more results then getDirectoryFilesIgnore, and may return less. However, it will obey invariants such as:

getDirectoryFilesIgnoreSlow root [x] [] ++ getDirectoryFilesIgnoreSlow root [y] []
== getDirectoryFilesIgnoreSlow root [x,y] []

In contrast getDirectoryFilesIgnore only guarantees that invariant on case-sensitive file systems.