From e8d695e3144d3c589f6a4475585fbf8cdf5adcca Mon Sep 17 00:00:00 2001 From: Doug Coleman <erg@jobim.local> Date: Mon, 20 Apr 2009 19:01:33 -0500 Subject: [PATCH] refactoring directory searching --- basis/io/directories/search/search.factor | 39 +++++++++++++---------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/basis/io/directories/search/search.factor b/basis/io/directories/search/search.factor index 236da09489..1346fbbdb8 100755 --- a/basis/io/directories/search/search.factor +++ b/basis/io/directories/search/search.factor @@ -3,7 +3,7 @@ USING: accessors arrays continuations deques dlists fry io.directories io.files io.files.info io.pathnames kernel sequences system vocabs.loader locals math namespaces -sorting assocs ; +sorting assocs calendar threads ; IN: io.directories.search <PRIVATE @@ -70,30 +70,35 @@ ERROR: file-not-found ; : find-all-in-directories ( directories bfs? quot: ( obj -- ? ) -- paths/f ) '[ _ _ find-all-files ] map concat ; inline +: qualified-directory-entries ( path -- seq ) + directory-entries + current-directory get '[ [ _ prepend-path ] change-name ] map ; + +: qualified-directory-files ( path -- seq ) + directory-files + current-directory get '[ _ prepend-path ] map ; + : with-qualified-directory-files ( path quot -- ) - '[ - "" directory-files current-directory get - '[ _ prepend-path ] map @ - ] with-directory ; inline + '[ "" qualified-directory-files @ ] with-directory ; inline : with-qualified-directory-entries ( path quot -- ) - '[ - "" directory-entries current-directory get - '[ [ _ prepend-path ] change-name ] map @ - ] with-directory ; inline + '[ "" qualified-directory-entries @ ] with-directory ; inline : directory-size ( path -- n ) - 0 swap t [ link-info size-on-disk>> + ] each-file ; + 0 swap t [ + [ link-info size-on-disk>> + ] [ 2drop ] recover + ] each-file ; + +: path>usage ( directory-entry -- name size ) + [ name>> dup ] [ directory? ] bi [ + directory-size + ] [ + [ link-info size-on-disk>> ] [ drop 0 ] recover + ] if ; : directory-usage ( path -- assoc ) [ - [ - [ name>> dup ] [ directory? ] bi [ - directory-size - ] [ - link-info size-on-disk>> - ] if - ] { } map>assoc + [ [ path>usage ] [ drop name>> 0 ] recover ] { } map>assoc ] with-qualified-directory-entries sort-values ; os windows? [ "io.directories.search.windows" require ] when