Browse Source

Use streamly-posix for dircontents wrt #34

Also add getDirsFilesStream.
master
Julian Ospald 4 years ago
parent
commit
270d007e40
No known key found for this signature in database GPG Key ID: 511B62C09D50CD28
6 changed files with 46 additions and 10 deletions
  1. +4
    -0
      hpath-directory/CHANGELOG.md
  2. +2
    -1
      hpath-directory/hpath-directory.cabal
  3. +20
    -6
      hpath-directory/src/System/Posix/RawFilePath/Directory.hs
  4. +4
    -0
      hpath-io/CHANGELOG.md
  5. +1
    -1
      hpath-io/hpath-io.cabal
  6. +15
    -2
      hpath-io/src/HPath/IO.hs

+ 4
- 0
hpath-directory/CHANGELOG.md View File

@@ -1,5 +1,9 @@
# Revision history for hpath-directory # Revision history for hpath-directory


## 0.13.4 -- 2020-05-08

* Add getDirsFilesStream and use streamly-posix for dircontents (#34)

## 0.13.3 -- 2020-04-14 ## 0.13.3 -- 2020-04-14


* Fix tests on mac * Fix tests on mac


+ 2
- 1
hpath-directory/hpath-directory.cabal View File

@@ -1,7 +1,7 @@
cabal-version: >=1.10 cabal-version: >=1.10


name: hpath-directory name: hpath-directory
version: 0.13.3
version: 0.13.4
synopsis: Alternative to 'directory' package with ByteString based filepaths synopsis: Alternative to 'directory' package with ByteString based filepaths
description: This provides a safer alternative to the 'directory' description: This provides a safer alternative to the 'directory'
package. FilePaths are ByteString based, so this package. FilePaths are ByteString based, so this
@@ -44,6 +44,7 @@ library
, safe-exceptions >= 0.1 , safe-exceptions >= 0.1
, streamly >= 0.7 , streamly >= 0.7
, streamly-bytestring >= 0.1.2 , streamly-bytestring >= 0.1.2
, streamly-posix >= 0.1.0.0
, time >= 1.8 , time >= 1.8
, unix >= 2.5 , unix >= 2.5
, unix-bytestring >= 0.3 , unix-bytestring >= 0.3


+ 20
- 6
hpath-directory/src/System/Posix/RawFilePath/Directory.hs View File

@@ -27,7 +27,8 @@
-- Import as: -- Import as:
-- > import System.Posix.RawFilePath.Directory -- > import System.Posix.RawFilePath.Directory


{-# LANGUAGE CPP #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-} -- streamly


module System.Posix.RawFilePath.Directory module System.Posix.RawFilePath.Directory
( (
@@ -82,6 +83,7 @@ module System.Posix.RawFilePath.Directory
-- * Directory reading -- * Directory reading
, getDirsFiles , getDirsFiles
, getDirsFiles' , getDirsFiles'
, getDirsFilesStream
-- * Filetype operations -- * Filetype operations
, getFileType , getFileType
-- * Others -- * Others
@@ -93,8 +95,11 @@ where


import Control.Applicative ( (<$>) ) import Control.Applicative ( (<$>) )
import Control.Exception.Safe ( IOException import Control.Exception.Safe ( IOException
, MonadCatch
, MonadMask
, bracket , bracket
, bracketOnError , bracketOnError
, onException
, throwIO , throwIO
, finally , finally
) )
@@ -105,6 +110,7 @@ import Control.Monad ( unless
import Control.Monad.Catch ( MonadThrow(..) ) import Control.Monad.Catch ( MonadThrow(..) )
import Control.Monad.Fail ( MonadFail ) import Control.Monad.Fail ( MonadFail )
import Control.Monad.IfElse ( unlessM ) import Control.Monad.IfElse ( unlessM )
import Control.Monad.IO.Class ( liftIO )
import qualified Data.ByteString as BS import qualified Data.ByteString as BS
import Data.ByteString ( ByteString ) import Data.ByteString ( ByteString )
import Data.Traversable ( for ) import Data.Traversable ( for )
@@ -155,6 +161,8 @@ import Streamly
import Streamly.External.ByteString import Streamly.External.ByteString
import qualified Streamly.External.ByteString.Lazy import qualified Streamly.External.ByteString.Lazy
as SL as SL
import qualified Streamly.External.Posix.DirStream
as SD
import qualified Streamly.Data.Fold as FL import qualified Streamly.Data.Fold as FL
import Streamly.Memory.Array import Streamly.Memory.Array
import qualified Streamly.FileSystem.Handle as FH import qualified Streamly.FileSystem.Handle as FH
@@ -1147,11 +1155,17 @@ getDirsFiles p = do
-- of prepending the base path. -- of prepending the base path.
getDirsFiles' :: RawFilePath -- ^ dir to read getDirsFiles' :: RawFilePath -- ^ dir to read
-> IO [RawFilePath] -> IO [RawFilePath]
getDirsFiles' fp = do
fd <- openFd fp SPI.ReadOnly [SPDF.oNofollow] Nothing
rawContents <- getDirectoryContents' fd
fmap catMaybes $ for rawContents $ \(_, f) ->
if FP.isSpecialDirectoryEntry f then pure Nothing else pure $ Just f
getDirsFiles' fp = getDirsFilesStream fp >>= S.toList


-- | Like 'getDirsFiles'', except returning a Stream.
getDirsFilesStream :: (MonadCatch m, MonadAsync m, MonadMask m)
=> RawFilePath
-> IO (SerialT m RawFilePath)
getDirsFilesStream fp = do
fd <- openFd fp SPI.ReadOnly [SPDF.oNofollow] Nothing
ds <- SPDT.fdOpendir fd `onException` SPI.closeFd fd
pure $ fmap snd $ SD.dirContentsStream ds








+ 4
- 0
hpath-io/CHANGELOG.md View File

@@ -1,5 +1,9 @@
# Revision history for hpath-io # Revision history for hpath-io


## 0.13.2 -- 2020-05-08

* Add getDirsFilesStream and use streamly-posix for dircontents (#34)

## 0.13.0 -- 2020-01-26 ## 0.13.0 -- 2020-01-26


* switch to using 'hpath-bytestring' for the implementation (this is now just a wrapper module, mostly) * switch to using 'hpath-bytestring' for the implementation (this is now just a wrapper module, mostly)


+ 1
- 1
hpath-io/hpath-io.cabal View File

@@ -1,5 +1,5 @@
name: hpath-io name: hpath-io
version: 0.13.1
version: 0.13.2
synopsis: High-level IO operations on files/directories synopsis: High-level IO operations on files/directories
description: High-level IO operations on files/directories, utilizing type-safe Paths description: High-level IO operations on files/directories, utilizing type-safe Paths
-- bug-reports: -- bug-reports:


+ 15
- 2
hpath-io/src/HPath/IO.hs View File

@@ -27,7 +27,8 @@
-- For other functions (like `copyFile`), the behavior on these file types is -- For other functions (like `copyFile`), the behavior on these file types is
-- unreliable/unsafe. Check the documentation of those functions for details. -- unreliable/unsafe. Check the documentation of those functions for details.


{-# LANGUAGE PackageImports #-}
{-# LANGUAGE FlexibleContexts #-} -- streamly
{-# LANGUAGE PackageImports #-}


module HPath.IO module HPath.IO
( (
@@ -82,6 +83,7 @@ module HPath.IO
-- * Directory reading -- * Directory reading
, getDirsFiles , getDirsFiles
, getDirsFiles' , getDirsFiles'
, getDirsFilesStream
-- * Filetype operations -- * Filetype operations
, getFileType , getFileType
-- * Others -- * Others
@@ -94,7 +96,9 @@ module HPath.IO
where where




import Control.Exception.Safe ( bracketOnError
import Control.Exception.Safe ( MonadMask
, MonadCatch
, bracketOnError
, finally , finally
) )
import Control.Monad.Catch ( MonadThrow(..) ) import Control.Monad.Catch ( MonadThrow(..) )
@@ -761,6 +765,15 @@ getDirsFiles' (Path fp) = do
for rawContents $ \r -> parseRel r for rawContents $ \r -> parseRel r




-- | Like 'getDirsFiles'', except returning a Stream.
getDirsFilesStream :: (MonadCatch m, MonadAsync m, MonadMask m)
=> Path b
-> IO (SerialT m (Path Rel))
getDirsFilesStream (Path fp) = do
s <- RD.getDirsFilesStream fp
pure (s >>= parseRel)






--------------------------- ---------------------------


Loading…
Cancel
Save