io.directories.search: Add some more combinators for finding files.

db4
Doug Coleman 2015-05-21 22:34:55 -07:00
parent a2913d6bd7
commit cf3ccd0abe
1 changed files with 27 additions and 3 deletions

View File

@ -2,8 +2,8 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs continuations deques dlists fry USING: accessors arrays assocs continuations deques dlists fry
io.backend io.directories io.files.info io.pathnames kernel io.backend io.directories io.files.info io.pathnames kernel
kernel.private locals math sequences sorting strings system kernel.private locals math sequences sequences.extras sorting
unicode.case vocabs vocabs.loader ; strings system unicode.case vocabs ;
IN: io.directories.search IN: io.directories.search
: qualified-directory-entries ( path -- seq ) : qualified-directory-entries ( path -- seq )
@ -63,9 +63,27 @@ TUPLE: directory-iterator
PRIVATE> PRIVATE>
: each-file ( path bfs? quot: ( ... name -- ... ) -- ) : each-file ( path bfs? quot -- )
setup-traversal iterate-directory drop ; inline setup-traversal iterate-directory drop ; inline
: each-file-breadth ( path quot -- )
t swap each-file ; inline
: each-file-depth ( path quot -- )
f swap each-file ; inline
: filter-files-by-depth ( quot -- seq )
selector* [ each-file-depth ] dip ; inline
: filter-files-by-breadth ( quot -- seq )
selector* [ each-file-breadth ] dip ; inline
: all-files-by-depth ( quot -- seq )
collector [ each-file-depth ] dip ; inline
: all-files-by-breadth ( quot -- seq )
collector [ each-file-breadth ] dip ; inline
: each-directory-entry ( path bfs? quot: ( ... entry -- ... ) -- ) : each-directory-entry ( path bfs? quot: ( ... entry -- ... ) -- )
setup-traversal iterate-directory-entries drop ; inline setup-traversal iterate-directory-entries drop ; inline
@ -147,4 +165,10 @@ ERROR: sequence-expected obj ;
: find-by-extension ( path extension -- seq ) : find-by-extension ( path extension -- seq )
1array find-by-extensions ; 1array find-by-extensions ;
: find-files-larger-than ( path size -- seq )
'[ file-info size>> _ > ] filter-files-by-depth ;
: file-info-recursive ( path -- seq )
[ dup ?file-info [ 2array ] [ drop f ] if* ] filter-files-by-depth ;
os windows? [ "io.directories.search.windows" require ] when os windows? [ "io.directories.search.windows" require ] when