Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## Path IO 1.3.1

* Made `listDirRecur` faster for deep directory trees.

## Path IO 1.3.0

* Change the default behavior of recursive traversal APIs to not follow
Expand Down
11 changes: 8 additions & 3 deletions Path/IO.hs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ module Path.IO
, getModificationTime )
where

import Control.Arrow ((***))
import Control.Monad
import Control.Monad.Catch
import Control.Monad.IO.Class (MonadIO (..))
Expand All @@ -111,6 +112,7 @@ import Data.Time (UTCTime)
import Path
import System.IO (Handle)
import System.IO.Error (isDoesNotExistError)
import qualified Data.DList as DList
import qualified Data.Set as S
import qualified System.Directory as D
import qualified System.FilePath as F
Expand Down Expand Up @@ -335,9 +337,12 @@ listDir path = do
listDirRecur :: (MonadIO m, MonadThrow m)
=> Path b Dir -- ^ Directory to list
-> m ([Path Abs Dir], [Path Abs File]) -- ^ Sub-directories and files
listDirRecur = walkDirAccum (Just excludeSymlinks) (\_ d f -> return (d, f))
where excludeSymlinks _ subdirs _ =
liftM WalkExclude (filterM isSymlink subdirs)
listDirRecur dir = (DList.toList *** DList.toList)
`liftM` walkDirAccum (Just excludeSymlinks) writer dir
where
excludeSymlinks _ subdirs _ =
WalkExclude `liftM` filterM isSymlink subdirs
writer _ ds fs = return (DList.fromList ds, DList.fromList fs)

-- | Copies a directory recursively. It /does not/ follow symbolic links and
-- preserves permissions when possible. If the destination directory already
Expand Down
1 change: 1 addition & 0 deletions path-io.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ library
build-depends: base >= 4.7 && < 5.0
, containers
, directory >= 1.2.2 && < 1.4
, dlist >= 0.8 && < 0.9
, exceptions >= 0.8 && < 0.9
, filepath >= 1.2 && < 1.5
, path >= 0.5 && < 0.6
Expand Down