sort directory lists so operations are independent of filesystem directory order
svn: r6930 original commit: 045b9e9ec7996991bf102fbbe99327463841f115
This commit is contained in:
parent
56c8cafc5b
commit
84e2fa4c84
|
@ -185,6 +185,14 @@
|
|||
(cond [(and name (regexp-match #rx#"[.]([^.]+)$" name)) => cadr]
|
||||
[else #f])))
|
||||
|
||||
;; utility: sorted dirlist so functions are deterministic
|
||||
(define/kw (sorted-dirlist . args)
|
||||
(let* ([ps (apply directory-list args)]
|
||||
[ps (map (lambda (p) (cons (path->string p) p)) ps)]
|
||||
[ps (sort ps (lambda (p1 p2) (string<? (car p1) (car p2))))]
|
||||
[ps (map cdr ps)])
|
||||
ps))
|
||||
|
||||
(define (delete-directory/files path)
|
||||
(unless (path-string? path)
|
||||
(raise-type-error 'delete-directory/files "path or string" path))
|
||||
|
@ -193,25 +201,24 @@
|
|||
(delete-file path)]
|
||||
[(directory-exists? path)
|
||||
(for-each (lambda (e) (delete-directory/files (build-path path e)))
|
||||
(directory-list path))
|
||||
(sorted-dirlist path))
|
||||
(delete-directory path)]
|
||||
[else (error 'delete-directory/files
|
||||
"encountered ~a, neither a file nor a directory"
|
||||
path)]))
|
||||
|
||||
(define (copy-directory/files src dest)
|
||||
(cond
|
||||
[(file-exists? src)
|
||||
(copy-file src dest)]
|
||||
[(directory-exists? src)
|
||||
(make-directory dest)
|
||||
(for-each (lambda (e)
|
||||
(copy-directory/files (build-path src e)
|
||||
(build-path dest e)))
|
||||
(directory-list src))]
|
||||
[else (error 'copy-directory/files
|
||||
"encountered ~a, neither a file nor a directory"
|
||||
src)]))
|
||||
(cond [(file-exists? src)
|
||||
(copy-file src dest)]
|
||||
[(directory-exists? src)
|
||||
(make-directory dest)
|
||||
(for-each (lambda (e)
|
||||
(copy-directory/files (build-path src e)
|
||||
(build-path dest e)))
|
||||
(sorted-dirlist src))]
|
||||
[else (error 'copy-directory/files
|
||||
"encountered ~a, neither a file nor a directory"
|
||||
src)]))
|
||||
|
||||
(define (make-directory* dir)
|
||||
(let-values ([(base name dir?) (split-path dir)])
|
||||
|
@ -473,8 +480,7 @@
|
|||
(case-lambda
|
||||
[(acc)
|
||||
(do-paths (map (lambda (p) (build-path path p))
|
||||
(sort
|
||||
(directory-list path) void))
|
||||
(sorted-dirlist path))
|
||||
acc)]
|
||||
[(acc descend?)
|
||||
(if descend? (descend acc) acc)])])
|
||||
|
@ -485,7 +491,7 @@
|
|||
(define (do-paths paths acc)
|
||||
(cond [(null? paths) acc]
|
||||
[else (do-paths (cdr paths) (do-path (car paths) acc))]))
|
||||
(if path (do-path path init) (do-paths (directory-list) init)))
|
||||
(if path (do-path path init) (do-paths (sorted-dirlist) init)))
|
||||
|
||||
(define/kw (find-files f #:optional [path #f])
|
||||
(reverse!
|
||||
|
|
Loading…
Reference in New Issue
Block a user