pipes-files 0.1.2 → 0.1.3
raw patch · 4 files changed
+31/−32 lines, 4 filesdep +logictdep ~basedep ~exceptionsdep ~freePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: logict
Dependency ranges changed: base, exceptions, free, hierarchy, mmorph, text, transformers-compat
API changes (from Hackage documentation)
- Pipes.Files.Types: instance a ~ GHC.Types.Char => Pipes.Files.Types.IsFilePath [a]
+ Pipes.Files.Types: instance (a ~ GHC.Types.Char) => Pipes.Files.Types.IsFilePath [a]
- Pipes.Files: directoryFiles :: MonadIO m => FilePath -> TreeT m FilePath
+ Pipes.Files: directoryFiles :: (MonadPlus m, MonadIO m) => FilePath -> TreeT m FilePath
Files
- Pipes/Files.hs +16/−19
- Pipes/Files/Directory.hs +1/−1
- pipes-files.cabal +11/−8
- test/Main.hs +3/−4
Pipes/Files.hs view
@@ -3,8 +3,10 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-}-{-# LANGUAGE TupleSections #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ViewPatterns #-} module Pipes.Files (@@ -92,6 +94,7 @@ import Control.Exception as E import Control.Monad import Control.Monad.IO.Class+import Control.Monad.Logic import Control.Monad.Morph import Control.Monad.Trans.Control import Data.Attoparsec.Text as A@@ -105,12 +108,12 @@ import Data.Time.Clock.POSIX import Data.Word (Word8) import Foreign.C+import Hierarchy import Pipes import Pipes.Files.Directory import Pipes.Files.Types import qualified Pipes.Prelude as P import Pipes.Safe-import Pipes.Tree import Prelude import System.Directory hiding (executable, findFiles) import System.Posix.ByteString.FilePath@@ -538,23 +541,17 @@ {-# INLINE handleEntryIO #-} -- | Return all files within a directory tree, hierarchically.-directoryFiles :: MonadIO m => FilePath -> TreeT m FilePath-directoryFiles path = CofreeT $ Select $ do- eres <- liftIO $ E.try $ getDirectoryContents path- case eres of- Left (_ :: IOException) -> return ()- -- liftIO $ putStrLn $- -- "Error reading directory " ++ path ++ ": " ++ show e- Right entries ->- forM_ (filter (`notElem` [".", ".."]) entries) $ \entry -> do- let fullPath = path ++ "/" ++ entry- estat <- liftIO $ E.try $ getFileStatus fullPath- case estat of- Left (_ :: IOException) -> return ()- Right st ->- yield (fullPath :< if isDirectory st- then Just $ directoryFiles fullPath- else Nothing)+directoryFiles :: (MonadPlus m, MonadIO m) => FilePath -> TreeT m FilePath+directoryFiles path = CofreeT $ do+ Right entries <-+ liftIO $ E.try @E.SomeException $ getDirectoryContents path+ entry <- select (filter (`notElem` [".", ".."]) entries)+ let fullPath = path ++ "/" ++ entry+ Right st <- liftIO $ E.try @E.SomeException $ getFileStatus fullPath+ pure $ fullPath :<+ if isDirectory st+ then Just (directoryFiles fullPath)+ else Nothing genericFindFiles :: (MonadIO m, MonadBaseControl IO m,
Pipes/Files/Directory.hs view
@@ -32,7 +32,7 @@ throwErrnoPathIfNullRetry "openDirStream" name $ c_opendir s {-# INLINE openDirStream #-} -foreign import ccall unsafe "__hsunix_opendir"+foreign import ccall unsafe "opendir" c_opendir :: CString -> IO (Ptr CDir) getDirectoryContentsAndAttrs :: RawFilePath -> IO [(RawFilePath, CUInt)]
pipes-files.cabal view
@@ -1,5 +1,5 @@ name: pipes-files-version: 0.1.2+version: 0.1.3 synopsis: Fast traversal of directory trees using pipes description: Fast traversal of directory trees using pipes homepage: https://github.com/jwiegley/pipes-files@@ -35,20 +35,20 @@ , Pipes.Files.Directory , Pipes.Files.Types build-depends: - base >=4.7 && <4.10+ base >=4.7 && <5 , transformers >=0.3 && <0.6 , transformers-base >=0.3 && <0.6- , transformers-compat >=0.3 && <0.6- , exceptions >=0.8 && <0.9- , mmorph >=1.0 && <1.1+ , transformers-compat >=0.3 && <1.0+ , exceptions >=0.10 && <1.0+ , mmorph >=1.0 && <2 , mtl >=2.1 && <2.3 , monad-control >=1.0 && <1.1 , semigroups >=0.16 && <0.19- , free >=4.12 && <4.13+ , free >=4.12 && <6 , pipes >=4.1 && <4.4 , directory >=1.2 && <1.4 , unix >=2.7 && <2.8- , hierarchy >=0.2.1+ , hierarchy >=1.0.0 , regex-posix , unix-compat , attoparsec@@ -58,6 +58,7 @@ , filepath , posix-paths , pipes-safe+ , logict -- hs-source-dirs: default-language: Haskell2010 @@ -72,6 +73,7 @@ , doctest >=0.8 , filepath >=1.3 , semigroups >=0.16 && <0.19+ , text test-suite test default-language: Haskell2010@@ -81,7 +83,7 @@ main-is: Main.hs build-depends: base >=3- , hierarchy+ , hierarchy >=1.0.0 , pipes-files , pipes >=4.1 && <4.4 , directory >=1.2 && <1.4@@ -90,6 +92,7 @@ , mtl >=2.1 && <2.3 , hspec >=1.4.4 , hspec-expectations >=0.3+ , logict test-suite find-hs default-language: Haskell2010
test/Main.hs view
@@ -2,11 +2,10 @@ import Control.Cond import Control.Monad+import Control.Monad.Logic import Data.List-import Pipes+import Hierarchy import Pipes.Files-import Pipes.Prelude (toListM)-import Pipes.Tree import Test.Hspec main :: IO ()@@ -44,5 +43,5 @@ , "./test/doctest.hs" , "./test/find-hs.hs" ]- found <- toListM $ enumerate (walk files)+ found <- observeAllT $ walk files sort found `shouldBe` expected