hpath-directory 0.13.3 → 0.13.4
raw patch · 3 files changed
+27/−7 lines, 3 filesdep +streamly-posixdep +transformersPVP ok
version bump matches the API change (PVP)
Dependencies added: streamly-posix, transformers
API changes (from Hackage documentation)
+ System.Posix.RawFilePath.Directory: getDirsFilesStream :: (MonadCatch m, MonadAsync m, MonadMask m) => RawFilePath -> IO (SerialT m RawFilePath)
Files
- CHANGELOG.md +4/−0
- hpath-directory.cabal +3/−1
- src/System/Posix/RawFilePath/Directory.hs +20/−6
CHANGELOG.md view
@@ -1,5 +1,9 @@ # 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 * Fix tests on mac
hpath-directory.cabal view
@@ -1,7 +1,7 @@ cabal-version: >=1.10 name: hpath-directory-version: 0.13.3+version: 0.13.4 synopsis: Alternative to 'directory' package with ByteString based filepaths description: This provides a safer alternative to the 'directory' package. FilePaths are ByteString based, so this@@ -44,7 +44,9 @@ , safe-exceptions >= 0.1 , streamly >= 0.7 , streamly-bytestring >= 0.1.2+ , streamly-posix >= 0.1.0.1 , time >= 1.8+ , transformers , unix >= 2.5 , unix-bytestring >= 0.3 , utf8-string
src/System/Posix/RawFilePath/Directory.hs view
@@ -27,7 +27,8 @@ -- Import as: -- > import System.Posix.RawFilePath.Directory -{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-} -- streamly module System.Posix.RawFilePath.Directory (@@ -82,6 +83,7 @@ -- * Directory reading , getDirsFiles , getDirsFiles'+ , getDirsFilesStream -- * Filetype operations , getFileType -- * Others@@ -93,8 +95,11 @@ import Control.Applicative ( (<$>) ) import Control.Exception.Safe ( IOException+ , MonadCatch+ , MonadMask , bracket , bracketOnError+ , onException , throwIO , finally )@@ -105,6 +110,7 @@ import Control.Monad.Catch ( MonadThrow(..) ) import Control.Monad.Fail ( MonadFail ) import Control.Monad.IfElse ( unlessM )+import Control.Monad.IO.Class ( liftIO ) import qualified Data.ByteString as BS import Data.ByteString ( ByteString ) import Data.Traversable ( for )@@ -155,6 +161,8 @@ import Streamly.External.ByteString import qualified Streamly.External.ByteString.Lazy as SL+import qualified Streamly.External.Posix.DirStream+ as SD import qualified Streamly.Data.Fold as FL import Streamly.Memory.Array import qualified Streamly.FileSystem.Handle as FH@@ -1147,11 +1155,17 @@ -- of prepending the base path. getDirsFiles' :: RawFilePath -- ^ dir to read -> 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