packages feed

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 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