diff options
-rw-r--r-- | guix/build/utils.scm | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/guix/build/utils.scm b/guix/build/utils.scm index d17346607f..7b49e9f4c7 100644 --- a/guix/build/utils.scm +++ b/guix/build/utils.scm @@ -32,6 +32,7 @@ with-directory-excursion mkdir-p copy-recursively + delete-file-recursively find-files set-path-environment-variable @@ -147,6 +148,26 @@ return values of applying PROC to the port." #t source)) +(define (delete-file-recursively dir) + "Delete DIR recursively, like `rm -rf', without following symlinks. Report +but ignore errors." + (file-system-fold (const #t) ; enter? + (lambda (file stat result) ; leaf + (delete-file file)) + (const #t) ; down + (lambda (dir stat result) ; up + (rmdir dir)) + (const #t) ; skip + (lambda (file stat errno result) + (format (current-error-port) + "warning: failed to delete ~a: ~a~%" + file (strerror errno))) + #t + dir + + ;; Don't follow symlinks. + lstat)) + (define (find-files dir regexp) "Return the list of files under DIR whose basename matches REGEXP." (define file-rx |