Lastest docs updated
travis build: 78
commit: a31c9d1e88
auto-pushed to gh-pages
This commit is contained in:
@@ -670,243 +670,249 @@
|
||||
<a name="line-661"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-662"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-663"></a><span class='hs-comment'>-- - `AlreadyExists` if destination file already exists</span>
|
||||
<a name="line-664"></a><span class='hs-definition'>createRegularFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-665"></a><span class='hs-definition'>createRegularFile</span> <span class='hs-varid'>fm</span> <span class='hs-varid'>dest</span> <span class='hs-keyglyph'>=</span>
|
||||
<a name="line-666"></a> <span class='hs-varid'>bracket</span> <span class='hs-layout'>(</span><span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-varid'>openFd</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>dest</span><span class='hs-layout'>)</span> <span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-conid'>WriteOnly</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>fm</span><span class='hs-layout'>)</span>
|
||||
<a name="line-667"></a> <span class='hs-layout'>(</span><span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-varid'>defaultFileFlags</span> <span class='hs-layout'>{</span> <span class='hs-varid'>exclusive</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
|
||||
<a name="line-668"></a> <span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-varid'>closeFd</span>
|
||||
<a name="line-669"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
|
||||
<a name="line-670"></a>
|
||||
<a name="line-671"></a>
|
||||
<a name="line-672"></a><a name="createDir"></a><span class='hs-comment'>-- |Create an empty directory at the given directory with the given filename.</span>
|
||||
<a name="line-673"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-674"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-664"></a><span class='hs-comment'>-- - `NoSuchThing` if any of the parent components of the path</span>
|
||||
<a name="line-665"></a><span class='hs-comment'>-- do not exist</span>
|
||||
<a name="line-666"></a><span class='hs-definition'>createRegularFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-667"></a><span class='hs-definition'>createRegularFile</span> <span class='hs-varid'>fm</span> <span class='hs-varid'>dest</span> <span class='hs-keyglyph'>=</span>
|
||||
<a name="line-668"></a> <span class='hs-varid'>bracket</span> <span class='hs-layout'>(</span><span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-varid'>openFd</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>dest</span><span class='hs-layout'>)</span> <span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-conid'>WriteOnly</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>fm</span><span class='hs-layout'>)</span>
|
||||
<a name="line-669"></a> <span class='hs-layout'>(</span><span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-varid'>defaultFileFlags</span> <span class='hs-layout'>{</span> <span class='hs-varid'>exclusive</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
|
||||
<a name="line-670"></a> <span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-varid'>closeFd</span>
|
||||
<a name="line-671"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
|
||||
<a name="line-672"></a>
|
||||
<a name="line-673"></a>
|
||||
<a name="line-674"></a><a name="createDir"></a><span class='hs-comment'>-- |Create an empty directory at the given directory with the given filename.</span>
|
||||
<a name="line-675"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-676"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-677"></a><span class='hs-comment'>-- - `AlreadyExists` if destination directory already exists</span>
|
||||
<a name="line-678"></a><span class='hs-definition'>createDir</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-679"></a><span class='hs-definition'>createDir</span> <span class='hs-varid'>fm</span> <span class='hs-varid'>dest</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>createDirectory</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>dest</span><span class='hs-layout'>)</span> <span class='hs-varid'>fm</span>
|
||||
<a name="line-680"></a>
|
||||
<a name="line-681"></a>
|
||||
<a name="line-682"></a><a name="createSymlink"></a><span class='hs-comment'>-- |Create a symlink.</span>
|
||||
<a name="line-683"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-684"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-685"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-686"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-687"></a><span class='hs-comment'>-- - `AlreadyExists` if destination file already exists</span>
|
||||
<a name="line-688"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-689"></a><span class='hs-comment'>-- Note: calls `symlink`</span>
|
||||
<a name="line-690"></a><span class='hs-definition'>createSymlink</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ destination file</span>
|
||||
<a name="line-691"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ByteString</span> <span class='hs-comment'>-- ^ path the symlink points to</span>
|
||||
<a name="line-692"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-693"></a><span class='hs-definition'>createSymlink</span> <span class='hs-varid'>dest</span> <span class='hs-varid'>sympoint</span>
|
||||
<a name="line-694"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>createSymbolicLink</span> <span class='hs-varid'>sympoint</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>dest</span><span class='hs-layout'>)</span>
|
||||
<a name="line-695"></a>
|
||||
<a name="line-696"></a>
|
||||
<a name="line-697"></a>
|
||||
<a name="line-698"></a> <span class='hs-comment'>----------------------------</span>
|
||||
<a name="line-699"></a> <span class='hs-comment'>--[ File Renaming/Moving ]--</span>
|
||||
<a name="line-700"></a> <span class='hs-comment'>----------------------------</span>
|
||||
<a name="line-676"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-677"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-678"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-679"></a><span class='hs-comment'>-- - `AlreadyExists` if destination directory already exists</span>
|
||||
<a name="line-680"></a><span class='hs-comment'>-- - `NoSuchThing` if any of the parent components of the path</span>
|
||||
<a name="line-681"></a><span class='hs-comment'>-- do not exist</span>
|
||||
<a name="line-682"></a><span class='hs-definition'>createDir</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-683"></a><span class='hs-definition'>createDir</span> <span class='hs-varid'>fm</span> <span class='hs-varid'>dest</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>createDirectory</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>dest</span><span class='hs-layout'>)</span> <span class='hs-varid'>fm</span>
|
||||
<a name="line-684"></a>
|
||||
<a name="line-685"></a>
|
||||
<a name="line-686"></a><a name="createSymlink"></a><span class='hs-comment'>-- |Create a symlink.</span>
|
||||
<a name="line-687"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-688"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-689"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-690"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-691"></a><span class='hs-comment'>-- - `AlreadyExists` if destination file already exists</span>
|
||||
<a name="line-692"></a><span class='hs-comment'>-- - `NoSuchThing` if any of the parent components of the path</span>
|
||||
<a name="line-693"></a><span class='hs-comment'>-- do not exist</span>
|
||||
<a name="line-694"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-695"></a><span class='hs-comment'>-- Note: calls `symlink`</span>
|
||||
<a name="line-696"></a><span class='hs-definition'>createSymlink</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ destination file</span>
|
||||
<a name="line-697"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ByteString</span> <span class='hs-comment'>-- ^ path the symlink points to</span>
|
||||
<a name="line-698"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-699"></a><span class='hs-definition'>createSymlink</span> <span class='hs-varid'>dest</span> <span class='hs-varid'>sympoint</span>
|
||||
<a name="line-700"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>createSymbolicLink</span> <span class='hs-varid'>sympoint</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>dest</span><span class='hs-layout'>)</span>
|
||||
<a name="line-701"></a>
|
||||
<a name="line-702"></a>
|
||||
<a name="line-703"></a><a name="renameFile"></a><span class='hs-comment'>-- |Rename a given file with the provided filename. Destination and source</span>
|
||||
<a name="line-704"></a><span class='hs-comment'>-- must be on the same device, otherwise `eXDEV` will be raised.</span>
|
||||
<a name="line-705"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-706"></a><span class='hs-comment'>-- Does not follow symbolic links, but renames the symbolic link file.</span>
|
||||
<a name="line-707"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-708"></a><span class='hs-comment'>-- Safety/reliability concerns:</span>
|
||||
<a name="line-709"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-710"></a><span class='hs-comment'>-- * has a separate set of exception handling, apart from the syscall</span>
|
||||
<a name="line-703"></a>
|
||||
<a name="line-704"></a> <span class='hs-comment'>----------------------------</span>
|
||||
<a name="line-705"></a> <span class='hs-comment'>--[ File Renaming/Moving ]--</span>
|
||||
<a name="line-706"></a> <span class='hs-comment'>----------------------------</span>
|
||||
<a name="line-707"></a>
|
||||
<a name="line-708"></a>
|
||||
<a name="line-709"></a><a name="renameFile"></a><span class='hs-comment'>-- |Rename a given file with the provided filename. Destination and source</span>
|
||||
<a name="line-710"></a><span class='hs-comment'>-- must be on the same device, otherwise `eXDEV` will be raised.</span>
|
||||
<a name="line-711"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-712"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-712"></a><span class='hs-comment'>-- Does not follow symbolic links, but renames the symbolic link file.</span>
|
||||
<a name="line-713"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-714"></a><span class='hs-comment'>-- - `NoSuchThing` if source file does not exist</span>
|
||||
<a name="line-715"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-716"></a><span class='hs-comment'>-- - `PermissionDenied` if source directory cannot be opened</span>
|
||||
<a name="line-717"></a><span class='hs-comment'>-- - `UnsupportedOperation` if source and destination are on different</span>
|
||||
<a name="line-718"></a><span class='hs-comment'>-- devices</span>
|
||||
<a name="line-719"></a><span class='hs-comment'>-- - `FileDoesExist` if destination file already exists</span>
|
||||
<a name="line-720"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-721"></a><span class='hs-comment'>-- - `DirDoesExist` if destination directory already exists</span>
|
||||
<a name="line-722"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-723"></a><span class='hs-comment'>-- - `SameFile` if destination and source are the same file</span>
|
||||
<a name="line-724"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-725"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-726"></a><span class='hs-comment'>-- Note: calls `rename` (but does not allow to rename over existing files)</span>
|
||||
<a name="line-727"></a><span class='hs-definition'>renameFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-728"></a><span class='hs-definition'>renameFile</span> <span class='hs-varid'>fromf</span> <span class='hs-varid'>tof</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-729"></a> <span class='hs-varid'>throwSameFile</span> <span class='hs-varid'>fromf</span> <span class='hs-varid'>tof</span>
|
||||
<a name="line-730"></a> <span class='hs-varid'>throwFileDoesExist</span> <span class='hs-varid'>tof</span>
|
||||
<a name="line-731"></a> <span class='hs-varid'>throwDirDoesExist</span> <span class='hs-varid'>tof</span>
|
||||
<a name="line-732"></a> <span class='hs-varid'>rename</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>fromf</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>tof</span><span class='hs-layout'>)</span>
|
||||
<a name="line-733"></a>
|
||||
<a name="line-734"></a>
|
||||
<a name="line-735"></a><a name="moveFile"></a><span class='hs-comment'>-- |Move a file. This also works across devices by copy-delete fallback.</span>
|
||||
<a name="line-736"></a><span class='hs-comment'>-- And also works on directories.</span>
|
||||
<a name="line-737"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-738"></a><span class='hs-comment'>-- Does not follow symbolic links, but renames the symbolic link file.</span>
|
||||
<a name="line-739"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-740"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-741"></a><span class='hs-comment'>-- Safety/reliability concerns:</span>
|
||||
<a name="line-742"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-743"></a><span class='hs-comment'>-- * `Overwrite` mode is not atomic</span>
|
||||
<a name="line-744"></a><span class='hs-comment'>-- * copy-delete fallback is inherently non-atomic</span>
|
||||
<a name="line-745"></a><span class='hs-comment'>-- * since this function calls `easyCopy` and `easyDelete` as a fallback</span>
|
||||
<a name="line-746"></a><span class='hs-comment'>-- to `renameFile`, file types that are not `RegularFile`, `SymbolicLink`</span>
|
||||
<a name="line-747"></a><span class='hs-comment'>-- or `Directory` may be ignored</span>
|
||||
<a name="line-748"></a><span class='hs-comment'>-- * for `Overwrite` mode, the destination will be deleted (not recursively)</span>
|
||||
<a name="line-749"></a><span class='hs-comment'>-- before moving</span>
|
||||
<a name="line-750"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-751"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-752"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-753"></a><span class='hs-comment'>-- - `NoSuchThing` if source file does not exist</span>
|
||||
<a name="line-754"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-755"></a><span class='hs-comment'>-- - `PermissionDenied` if source directory cannot be opened</span>
|
||||
<a name="line-756"></a><span class='hs-comment'>-- - `SameFile` if destination and source are the same file</span>
|
||||
<a name="line-757"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-714"></a><span class='hs-comment'>-- Safety/reliability concerns:</span>
|
||||
<a name="line-715"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-716"></a><span class='hs-comment'>-- * has a separate set of exception handling, apart from the syscall</span>
|
||||
<a name="line-717"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-718"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-719"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-720"></a><span class='hs-comment'>-- - `NoSuchThing` if source file does not exist</span>
|
||||
<a name="line-721"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-722"></a><span class='hs-comment'>-- - `PermissionDenied` if source directory cannot be opened</span>
|
||||
<a name="line-723"></a><span class='hs-comment'>-- - `UnsupportedOperation` if source and destination are on different</span>
|
||||
<a name="line-724"></a><span class='hs-comment'>-- devices</span>
|
||||
<a name="line-725"></a><span class='hs-comment'>-- - `FileDoesExist` if destination file already exists</span>
|
||||
<a name="line-726"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-727"></a><span class='hs-comment'>-- - `DirDoesExist` if destination directory already exists</span>
|
||||
<a name="line-728"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-729"></a><span class='hs-comment'>-- - `SameFile` if destination and source are the same file</span>
|
||||
<a name="line-730"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-731"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-732"></a><span class='hs-comment'>-- Note: calls `rename` (but does not allow to rename over existing files)</span>
|
||||
<a name="line-733"></a><span class='hs-definition'>renameFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-734"></a><span class='hs-definition'>renameFile</span> <span class='hs-varid'>fromf</span> <span class='hs-varid'>tof</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-735"></a> <span class='hs-varid'>throwSameFile</span> <span class='hs-varid'>fromf</span> <span class='hs-varid'>tof</span>
|
||||
<a name="line-736"></a> <span class='hs-varid'>throwFileDoesExist</span> <span class='hs-varid'>tof</span>
|
||||
<a name="line-737"></a> <span class='hs-varid'>throwDirDoesExist</span> <span class='hs-varid'>tof</span>
|
||||
<a name="line-738"></a> <span class='hs-varid'>rename</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>fromf</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>tof</span><span class='hs-layout'>)</span>
|
||||
<a name="line-739"></a>
|
||||
<a name="line-740"></a>
|
||||
<a name="line-741"></a><a name="moveFile"></a><span class='hs-comment'>-- |Move a file. This also works across devices by copy-delete fallback.</span>
|
||||
<a name="line-742"></a><span class='hs-comment'>-- And also works on directories.</span>
|
||||
<a name="line-743"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-744"></a><span class='hs-comment'>-- Does not follow symbolic links, but renames the symbolic link file.</span>
|
||||
<a name="line-745"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-746"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-747"></a><span class='hs-comment'>-- Safety/reliability concerns:</span>
|
||||
<a name="line-748"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-749"></a><span class='hs-comment'>-- * `Overwrite` mode is not atomic</span>
|
||||
<a name="line-750"></a><span class='hs-comment'>-- * copy-delete fallback is inherently non-atomic</span>
|
||||
<a name="line-751"></a><span class='hs-comment'>-- * since this function calls `easyCopy` and `easyDelete` as a fallback</span>
|
||||
<a name="line-752"></a><span class='hs-comment'>-- to `renameFile`, file types that are not `RegularFile`, `SymbolicLink`</span>
|
||||
<a name="line-753"></a><span class='hs-comment'>-- or `Directory` may be ignored</span>
|
||||
<a name="line-754"></a><span class='hs-comment'>-- * for `Overwrite` mode, the destination will be deleted (not recursively)</span>
|
||||
<a name="line-755"></a><span class='hs-comment'>-- before moving</span>
|
||||
<a name="line-756"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-757"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-758"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-759"></a><span class='hs-comment'>-- Throws in `Strict` mode only:</span>
|
||||
<a name="line-760"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-761"></a><span class='hs-comment'>-- - `FileDoesExist` if destination file already exists (`HPathIOException`)</span>
|
||||
<a name="line-762"></a><span class='hs-comment'>-- - `DirDoesExist` if destination directory already exists</span>
|
||||
<a name="line-763"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-759"></a><span class='hs-comment'>-- - `NoSuchThing` if source file does not exist</span>
|
||||
<a name="line-760"></a><span class='hs-comment'>-- - `PermissionDenied` if output directory cannot be written to</span>
|
||||
<a name="line-761"></a><span class='hs-comment'>-- - `PermissionDenied` if source directory cannot be opened</span>
|
||||
<a name="line-762"></a><span class='hs-comment'>-- - `SameFile` if destination and source are the same file</span>
|
||||
<a name="line-763"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-764"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-765"></a><span class='hs-comment'>-- Note: calls `rename` (but does not allow to rename over existing files)</span>
|
||||
<a name="line-766"></a><span class='hs-definition'>moveFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ file to move</span>
|
||||
<a name="line-767"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ destination</span>
|
||||
<a name="line-768"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CopyMode</span>
|
||||
<a name="line-769"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-770"></a><span class='hs-definition'>moveFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span> <span class='hs-varid'>cm</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-771"></a> <span class='hs-varid'>throwSameFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-772"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>cm</span> <span class='hs-keyword'>of</span>
|
||||
<a name="line-773"></a> <span class='hs-conid'>Strict</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>catchErrno</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>eXDEV</span><span class='hs-keyglyph'>]</span> <span class='hs-layout'>(</span><span class='hs-varid'>renameFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-774"></a> <span class='hs-varid'>easyCopy</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span> <span class='hs-conid'>Strict</span> <span class='hs-conid'>FailEarly</span>
|
||||
<a name="line-775"></a> <span class='hs-varid'>easyDelete</span> <span class='hs-varid'>from</span>
|
||||
<a name="line-776"></a> <span class='hs-conid'>Overwrite</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-777"></a> <span class='hs-varid'>ft</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getFileType</span> <span class='hs-varid'>from</span>
|
||||
<a name="line-778"></a> <span class='hs-varid'>writable</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>isWritable</span> <span class='hs-varop'>$</span> <span class='hs-varid'>dirname</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-779"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>ft</span> <span class='hs-keyword'>of</span>
|
||||
<a name="line-780"></a> <span class='hs-conid'>RegularFile</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-781"></a> <span class='hs-varid'>exists</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>doesFileExist</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-782"></a> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>exists</span> <span class='hs-varop'>&&</span> <span class='hs-varid'>writable</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>deleteFile</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
|
||||
<a name="line-783"></a> <span class='hs-conid'>SymbolicLink</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-784"></a> <span class='hs-varid'>exists</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>doesFileExist</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-785"></a> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>exists</span> <span class='hs-varop'>&&</span> <span class='hs-varid'>writable</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>deleteFile</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
|
||||
<a name="line-786"></a> <span class='hs-conid'>Directory</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-787"></a> <span class='hs-varid'>exists</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>doesDirectoryExist</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-788"></a> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>exists</span> <span class='hs-varop'>&&</span> <span class='hs-varid'>writable</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>deleteDir</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
|
||||
<a name="line-789"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-790"></a> <span class='hs-varid'>moveFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span> <span class='hs-conid'>Strict</span>
|
||||
<a name="line-791"></a>
|
||||
<a name="line-792"></a>
|
||||
<a name="line-793"></a>
|
||||
<a name="line-794"></a>
|
||||
<a name="line-795"></a>
|
||||
<a name="line-796"></a>
|
||||
<a name="line-797"></a> <span class='hs-comment'>-----------------------</span>
|
||||
<a name="line-798"></a> <span class='hs-comment'>--[ File Permissions]--</span>
|
||||
<a name="line-799"></a> <span class='hs-comment'>-----------------------</span>
|
||||
<a name="line-765"></a><span class='hs-comment'>-- Throws in `Strict` mode only:</span>
|
||||
<a name="line-766"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-767"></a><span class='hs-comment'>-- - `FileDoesExist` if destination file already exists (`HPathIOException`)</span>
|
||||
<a name="line-768"></a><span class='hs-comment'>-- - `DirDoesExist` if destination directory already exists</span>
|
||||
<a name="line-769"></a><span class='hs-comment'>-- (`HPathIOException`)</span>
|
||||
<a name="line-770"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-771"></a><span class='hs-comment'>-- Note: calls `rename` (but does not allow to rename over existing files)</span>
|
||||
<a name="line-772"></a><span class='hs-definition'>moveFile</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ file to move</span>
|
||||
<a name="line-773"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ destination</span>
|
||||
<a name="line-774"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CopyMode</span>
|
||||
<a name="line-775"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-776"></a><span class='hs-definition'>moveFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span> <span class='hs-varid'>cm</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-777"></a> <span class='hs-varid'>throwSameFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-778"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>cm</span> <span class='hs-keyword'>of</span>
|
||||
<a name="line-779"></a> <span class='hs-conid'>Strict</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>catchErrno</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>eXDEV</span><span class='hs-keyglyph'>]</span> <span class='hs-layout'>(</span><span class='hs-varid'>renameFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-780"></a> <span class='hs-varid'>easyCopy</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span> <span class='hs-conid'>Strict</span> <span class='hs-conid'>FailEarly</span>
|
||||
<a name="line-781"></a> <span class='hs-varid'>easyDelete</span> <span class='hs-varid'>from</span>
|
||||
<a name="line-782"></a> <span class='hs-conid'>Overwrite</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-783"></a> <span class='hs-varid'>ft</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getFileType</span> <span class='hs-varid'>from</span>
|
||||
<a name="line-784"></a> <span class='hs-varid'>writable</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>isWritable</span> <span class='hs-varop'>$</span> <span class='hs-varid'>dirname</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-785"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>ft</span> <span class='hs-keyword'>of</span>
|
||||
<a name="line-786"></a> <span class='hs-conid'>RegularFile</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-787"></a> <span class='hs-varid'>exists</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>doesFileExist</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-788"></a> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>exists</span> <span class='hs-varop'>&&</span> <span class='hs-varid'>writable</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>deleteFile</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
|
||||
<a name="line-789"></a> <span class='hs-conid'>SymbolicLink</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-790"></a> <span class='hs-varid'>exists</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>doesFileExist</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-791"></a> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>exists</span> <span class='hs-varop'>&&</span> <span class='hs-varid'>writable</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>deleteFile</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
|
||||
<a name="line-792"></a> <span class='hs-conid'>Directory</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-793"></a> <span class='hs-varid'>exists</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>doesDirectoryExist</span> <span class='hs-varid'>to</span>
|
||||
<a name="line-794"></a> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>exists</span> <span class='hs-varop'>&&</span> <span class='hs-varid'>writable</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>deleteDir</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
|
||||
<a name="line-795"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
|
||||
<a name="line-796"></a> <span class='hs-varid'>moveFile</span> <span class='hs-varid'>from</span> <span class='hs-varid'>to</span> <span class='hs-conid'>Strict</span>
|
||||
<a name="line-797"></a>
|
||||
<a name="line-798"></a>
|
||||
<a name="line-799"></a>
|
||||
<a name="line-800"></a>
|
||||
<a name="line-801"></a>
|
||||
<a name="line-802"></a><a name="newFilePerms"></a><span class='hs-comment'>-- |Default permissions for a new file.</span>
|
||||
<a name="line-803"></a><span class='hs-definition'>newFilePerms</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span>
|
||||
<a name="line-804"></a><span class='hs-definition'>newFilePerms</span>
|
||||
<a name="line-805"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ownerWriteMode</span>
|
||||
<a name="line-806"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>ownerReadMode</span>
|
||||
<a name="line-807"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupWriteMode</span>
|
||||
<a name="line-808"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupReadMode</span>
|
||||
<a name="line-809"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherWriteMode</span>
|
||||
<a name="line-810"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherReadMode</span>
|
||||
<a name="line-811"></a>
|
||||
<a name="line-812"></a>
|
||||
<a name="line-813"></a><a name="newDirPerms"></a><span class='hs-comment'>-- |Default permissions for a new directory.</span>
|
||||
<a name="line-814"></a><span class='hs-definition'>newDirPerms</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span>
|
||||
<a name="line-815"></a><span class='hs-definition'>newDirPerms</span>
|
||||
<a name="line-816"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ownerModes</span>
|
||||
<a name="line-817"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupExecuteMode</span>
|
||||
<a name="line-818"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupReadMode</span>
|
||||
<a name="line-819"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherExecuteMode</span>
|
||||
<a name="line-820"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherReadMode</span>
|
||||
<a name="line-821"></a>
|
||||
<a name="line-822"></a>
|
||||
<a name="line-823"></a>
|
||||
<a name="line-824"></a> <span class='hs-comment'>-------------------------</span>
|
||||
<a name="line-825"></a> <span class='hs-comment'>--[ Directory reading ]--</span>
|
||||
<a name="line-826"></a> <span class='hs-comment'>-------------------------</span>
|
||||
<a name="line-802"></a>
|
||||
<a name="line-803"></a> <span class='hs-comment'>-----------------------</span>
|
||||
<a name="line-804"></a> <span class='hs-comment'>--[ File Permissions]--</span>
|
||||
<a name="line-805"></a> <span class='hs-comment'>-----------------------</span>
|
||||
<a name="line-806"></a>
|
||||
<a name="line-807"></a>
|
||||
<a name="line-808"></a><a name="newFilePerms"></a><span class='hs-comment'>-- |Default permissions for a new file.</span>
|
||||
<a name="line-809"></a><span class='hs-definition'>newFilePerms</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span>
|
||||
<a name="line-810"></a><span class='hs-definition'>newFilePerms</span>
|
||||
<a name="line-811"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ownerWriteMode</span>
|
||||
<a name="line-812"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>ownerReadMode</span>
|
||||
<a name="line-813"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupWriteMode</span>
|
||||
<a name="line-814"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupReadMode</span>
|
||||
<a name="line-815"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherWriteMode</span>
|
||||
<a name="line-816"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherReadMode</span>
|
||||
<a name="line-817"></a>
|
||||
<a name="line-818"></a>
|
||||
<a name="line-819"></a><a name="newDirPerms"></a><span class='hs-comment'>-- |Default permissions for a new directory.</span>
|
||||
<a name="line-820"></a><span class='hs-definition'>newDirPerms</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FileMode</span>
|
||||
<a name="line-821"></a><span class='hs-definition'>newDirPerms</span>
|
||||
<a name="line-822"></a> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ownerModes</span>
|
||||
<a name="line-823"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupExecuteMode</span>
|
||||
<a name="line-824"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>groupReadMode</span>
|
||||
<a name="line-825"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherExecuteMode</span>
|
||||
<a name="line-826"></a> <span class='hs-varop'>`unionFileModes`</span> <span class='hs-varid'>otherReadMode</span>
|
||||
<a name="line-827"></a>
|
||||
<a name="line-828"></a>
|
||||
<a name="line-829"></a><a name="getDirsFiles"></a><span class='hs-comment'>-- |Gets all filenames of the given directory. This excludes "." and "..".</span>
|
||||
<a name="line-830"></a><span class='hs-comment'>-- This version does not follow symbolic links.</span>
|
||||
<a name="line-831"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-832"></a><span class='hs-comment'>-- The contents are not sorted and there is no guarantee on the ordering.</span>
|
||||
<a name="line-833"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-834"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-835"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-836"></a><span class='hs-comment'>-- - `NoSuchThing` if directory does not exist</span>
|
||||
<a name="line-837"></a><span class='hs-comment'>-- - `InappropriateType` if file type is wrong (file)</span>
|
||||
<a name="line-838"></a><span class='hs-comment'>-- - `InappropriateType` if file type is wrong (symlink to file)</span>
|
||||
<a name="line-839"></a><span class='hs-comment'>-- - `InappropriateType` if file type is wrong (symlink to dir)</span>
|
||||
<a name="line-840"></a><span class='hs-comment'>-- - `PermissionDenied` if directory cannot be opened</span>
|
||||
<a name="line-841"></a><span class='hs-definition'>getDirsFiles</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ dir to read</span>
|
||||
<a name="line-842"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span><span class='hs-keyglyph'>]</span>
|
||||
<a name="line-843"></a><span class='hs-definition'>getDirsFiles</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span>
|
||||
<a name="line-844"></a> <span class='hs-varid'>withAbsPath</span> <span class='hs-varid'>p</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>fp</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-845"></a> <span class='hs-varid'>fd</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>openFd</span> <span class='hs-varid'>fp</span> <span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-conid'>ReadOnly</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SPDF</span><span class='hs-varop'>.</span><span class='hs-varid'>oNofollow</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Nothing</span>
|
||||
<a name="line-846"></a> <span class='hs-varid'>return</span>
|
||||
<a name="line-847"></a> <span class='hs-varop'>.</span> <span class='hs-varid'>catMaybes</span>
|
||||
<a name="line-848"></a> <span class='hs-varop'>.</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varop'></></span><span class='hs-layout'>)</span> <span class='hs-varid'>p</span> <span class='hs-varop'><$></span> <span class='hs-layout'>(</span><span class='hs-varid'>parseMaybe</span> <span class='hs-varop'>.</span> <span class='hs-varid'>snd</span> <span class='hs-varop'>$</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
|
||||
<a name="line-849"></a> <span class='hs-varop'>=<<</span> <span class='hs-varid'>getDirectoryContents'</span> <span class='hs-varid'>fd</span>
|
||||
<a name="line-850"></a> <span class='hs-keyword'>where</span>
|
||||
<a name="line-851"></a> <span class='hs-varid'>parseMaybe</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Path</span> <span class='hs-conid'>Fn</span><span class='hs-layout'>)</span>
|
||||
<a name="line-852"></a> <span class='hs-varid'>parseMaybe</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>parseFn</span>
|
||||
<a name="line-853"></a>
|
||||
<a name="line-854"></a>
|
||||
<a name="line-855"></a>
|
||||
<a name="line-856"></a>
|
||||
<a name="line-857"></a> <span class='hs-comment'>---------------------------</span>
|
||||
<a name="line-858"></a> <span class='hs-comment'>--[ FileType operations ]--</span>
|
||||
<a name="line-859"></a> <span class='hs-comment'>---------------------------</span>
|
||||
<a name="line-829"></a>
|
||||
<a name="line-830"></a> <span class='hs-comment'>-------------------------</span>
|
||||
<a name="line-831"></a> <span class='hs-comment'>--[ Directory reading ]--</span>
|
||||
<a name="line-832"></a> <span class='hs-comment'>-------------------------</span>
|
||||
<a name="line-833"></a>
|
||||
<a name="line-834"></a>
|
||||
<a name="line-835"></a><a name="getDirsFiles"></a><span class='hs-comment'>-- |Gets all filenames of the given directory. This excludes "." and "..".</span>
|
||||
<a name="line-836"></a><span class='hs-comment'>-- This version does not follow symbolic links.</span>
|
||||
<a name="line-837"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-838"></a><span class='hs-comment'>-- The contents are not sorted and there is no guarantee on the ordering.</span>
|
||||
<a name="line-839"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-840"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-841"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-842"></a><span class='hs-comment'>-- - `NoSuchThing` if directory does not exist</span>
|
||||
<a name="line-843"></a><span class='hs-comment'>-- - `InappropriateType` if file type is wrong (file)</span>
|
||||
<a name="line-844"></a><span class='hs-comment'>-- - `InappropriateType` if file type is wrong (symlink to file)</span>
|
||||
<a name="line-845"></a><span class='hs-comment'>-- - `InappropriateType` if file type is wrong (symlink to dir)</span>
|
||||
<a name="line-846"></a><span class='hs-comment'>-- - `PermissionDenied` if directory cannot be opened</span>
|
||||
<a name="line-847"></a><span class='hs-definition'>getDirsFiles</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-comment'>-- ^ dir to read</span>
|
||||
<a name="line-848"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span><span class='hs-keyglyph'>]</span>
|
||||
<a name="line-849"></a><span class='hs-definition'>getDirsFiles</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span>
|
||||
<a name="line-850"></a> <span class='hs-varid'>withAbsPath</span> <span class='hs-varid'>p</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>fp</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-851"></a> <span class='hs-varid'>fd</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>openFd</span> <span class='hs-varid'>fp</span> <span class='hs-conid'>SPI</span><span class='hs-varop'>.</span><span class='hs-conid'>ReadOnly</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SPDF</span><span class='hs-varop'>.</span><span class='hs-varid'>oNofollow</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Nothing</span>
|
||||
<a name="line-852"></a> <span class='hs-varid'>return</span>
|
||||
<a name="line-853"></a> <span class='hs-varop'>.</span> <span class='hs-varid'>catMaybes</span>
|
||||
<a name="line-854"></a> <span class='hs-varop'>.</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varop'></></span><span class='hs-layout'>)</span> <span class='hs-varid'>p</span> <span class='hs-varop'><$></span> <span class='hs-layout'>(</span><span class='hs-varid'>parseMaybe</span> <span class='hs-varop'>.</span> <span class='hs-varid'>snd</span> <span class='hs-varop'>$</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
|
||||
<a name="line-855"></a> <span class='hs-varop'>=<<</span> <span class='hs-varid'>getDirectoryContents'</span> <span class='hs-varid'>fd</span>
|
||||
<a name="line-856"></a> <span class='hs-keyword'>where</span>
|
||||
<a name="line-857"></a> <span class='hs-varid'>parseMaybe</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Path</span> <span class='hs-conid'>Fn</span><span class='hs-layout'>)</span>
|
||||
<a name="line-858"></a> <span class='hs-varid'>parseMaybe</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>parseFn</span>
|
||||
<a name="line-859"></a>
|
||||
<a name="line-860"></a>
|
||||
<a name="line-861"></a>
|
||||
<a name="line-862"></a><a name="getFileType"></a><span class='hs-comment'>-- |Get the file type of the file located at the given path. Does</span>
|
||||
<a name="line-863"></a><span class='hs-comment'>-- not follow symbolic links.</span>
|
||||
<a name="line-864"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-865"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-866"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-867"></a><span class='hs-comment'>-- - `NoSuchThing` if the file does not exist</span>
|
||||
<a name="line-868"></a><span class='hs-comment'>-- - `PermissionDenied` if any part of the path is not accessible</span>
|
||||
<a name="line-869"></a><span class='hs-definition'>getFileType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FileType</span>
|
||||
<a name="line-870"></a><span class='hs-definition'>getFileType</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-871"></a> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>getSymbolicLinkStatus</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span>
|
||||
<a name="line-872"></a> <span class='hs-varid'>decide</span> <span class='hs-varid'>fs</span>
|
||||
<a name="line-873"></a> <span class='hs-keyword'>where</span>
|
||||
<a name="line-874"></a> <span class='hs-varid'>decide</span> <span class='hs-varid'>fs</span>
|
||||
<a name="line-875"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isDirectory</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Directory</span>
|
||||
<a name="line-876"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isRegularFile</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>RegularFile</span>
|
||||
<a name="line-877"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isSymbolicLink</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>SymbolicLink</span>
|
||||
<a name="line-878"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isBlockDevice</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>BlockDevice</span>
|
||||
<a name="line-879"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isCharacterDevice</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>CharacterDevice</span>
|
||||
<a name="line-880"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isNamedPipe</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>NamedPipe</span>
|
||||
<a name="line-881"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isSocket</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Socket</span>
|
||||
<a name="line-882"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioError</span> <span class='hs-varop'>$</span> <span class='hs-varid'>userError</span> <span class='hs-str'>"No filetype?!"</span>
|
||||
<a name="line-883"></a>
|
||||
<a name="line-884"></a>
|
||||
<a name="line-885"></a>
|
||||
<a name="line-886"></a> <span class='hs-comment'>--------------</span>
|
||||
<a name="line-887"></a> <span class='hs-comment'>--[ Others ]--</span>
|
||||
<a name="line-888"></a> <span class='hs-comment'>--------------</span>
|
||||
<a name="line-862"></a>
|
||||
<a name="line-863"></a> <span class='hs-comment'>---------------------------</span>
|
||||
<a name="line-864"></a> <span class='hs-comment'>--[ FileType operations ]--</span>
|
||||
<a name="line-865"></a> <span class='hs-comment'>---------------------------</span>
|
||||
<a name="line-866"></a>
|
||||
<a name="line-867"></a>
|
||||
<a name="line-868"></a><a name="getFileType"></a><span class='hs-comment'>-- |Get the file type of the file located at the given path. Does</span>
|
||||
<a name="line-869"></a><span class='hs-comment'>-- not follow symbolic links.</span>
|
||||
<a name="line-870"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-871"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-872"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-873"></a><span class='hs-comment'>-- - `NoSuchThing` if the file does not exist</span>
|
||||
<a name="line-874"></a><span class='hs-comment'>-- - `PermissionDenied` if any part of the path is not accessible</span>
|
||||
<a name="line-875"></a><span class='hs-definition'>getFileType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>FileType</span>
|
||||
<a name="line-876"></a><span class='hs-definition'>getFileType</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-877"></a> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>getSymbolicLinkStatus</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromAbs</span> <span class='hs-varid'>p</span><span class='hs-layout'>)</span>
|
||||
<a name="line-878"></a> <span class='hs-varid'>decide</span> <span class='hs-varid'>fs</span>
|
||||
<a name="line-879"></a> <span class='hs-keyword'>where</span>
|
||||
<a name="line-880"></a> <span class='hs-varid'>decide</span> <span class='hs-varid'>fs</span>
|
||||
<a name="line-881"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isDirectory</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Directory</span>
|
||||
<a name="line-882"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isRegularFile</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>RegularFile</span>
|
||||
<a name="line-883"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isSymbolicLink</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>SymbolicLink</span>
|
||||
<a name="line-884"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isBlockDevice</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>BlockDevice</span>
|
||||
<a name="line-885"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isCharacterDevice</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>CharacterDevice</span>
|
||||
<a name="line-886"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isNamedPipe</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>NamedPipe</span>
|
||||
<a name="line-887"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PF</span><span class='hs-varop'>.</span><span class='hs-varid'>isSocket</span> <span class='hs-varid'>fs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Socket</span>
|
||||
<a name="line-888"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioError</span> <span class='hs-varop'>$</span> <span class='hs-varid'>userError</span> <span class='hs-str'>"No filetype?!"</span>
|
||||
<a name="line-889"></a>
|
||||
<a name="line-890"></a>
|
||||
<a name="line-891"></a>
|
||||
<a name="line-892"></a><a name="canonicalizePath"></a><span class='hs-comment'>-- |Applies `realpath` on the given absolute path.</span>
|
||||
<a name="line-893"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-894"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-895"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-896"></a><span class='hs-comment'>-- - `NoSuchThing` if the file at the given path does not exist</span>
|
||||
<a name="line-897"></a><span class='hs-comment'>-- - `NoSuchThing` if the symlink is broken</span>
|
||||
<a name="line-898"></a><span class='hs-definition'>canonicalizePath</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span><span class='hs-layout'>)</span>
|
||||
<a name="line-899"></a><span class='hs-definition'>canonicalizePath</span> <span class='hs-layout'>(</span><span class='hs-conid'>MkPath</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-900"></a> <span class='hs-varid'>nl</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>SPDT</span><span class='hs-varop'>.</span><span class='hs-varid'>realpath</span> <span class='hs-varid'>l</span>
|
||||
<a name="line-901"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>MkPath</span> <span class='hs-varid'>nl</span>
|
||||
<a name="line-892"></a> <span class='hs-comment'>--------------</span>
|
||||
<a name="line-893"></a> <span class='hs-comment'>--[ Others ]--</span>
|
||||
<a name="line-894"></a> <span class='hs-comment'>--------------</span>
|
||||
<a name="line-895"></a>
|
||||
<a name="line-896"></a>
|
||||
<a name="line-897"></a>
|
||||
<a name="line-898"></a><a name="canonicalizePath"></a><span class='hs-comment'>-- |Applies `realpath` on the given absolute path.</span>
|
||||
<a name="line-899"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-900"></a><span class='hs-comment'>-- Throws:</span>
|
||||
<a name="line-901"></a><span class='hs-comment'>--</span>
|
||||
<a name="line-902"></a><span class='hs-comment'>-- - `NoSuchThing` if the file at the given path does not exist</span>
|
||||
<a name="line-903"></a><span class='hs-comment'>-- - `NoSuchThing` if the symlink is broken</span>
|
||||
<a name="line-904"></a><span class='hs-definition'>canonicalizePath</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Path</span> <span class='hs-conid'>Abs</span><span class='hs-layout'>)</span>
|
||||
<a name="line-905"></a><span class='hs-definition'>canonicalizePath</span> <span class='hs-layout'>(</span><span class='hs-conid'>MkPath</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
|
||||
<a name="line-906"></a> <span class='hs-varid'>nl</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>SPDT</span><span class='hs-varop'>.</span><span class='hs-varid'>realpath</span> <span class='hs-varid'>l</span>
|
||||
<a name="line-907"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>MkPath</span> <span class='hs-varid'>nl</span>
|
||||
</pre></body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user