From d46c4423f46278bd2f96770ceb0667431414349e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 18 Jun 2017 00:02:56 +0200 Subject: discovery: 'scheme-files' returns '() for a non-accessible directory. Fixes a regression introduced in d27cc3bfaafe6b5b0831e88afb1c46311d382a0b. Reported by Ricardo Wurmus . * guix/discovery.scm (scheme-files): Catch 'scandir*' system errors. Return '() and optionally raise a warning upon 'system-error'. * tests/discovery.scm ("scheme-modules, non-existent directory"): New test. --- guix/discovery.scm | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'guix/discovery.scm') diff --git a/guix/discovery.scm b/guix/discovery.scm index 6cf8d6d566..292df2bd9c 100644 --- a/guix/discovery.scm +++ b/guix/discovery.scm @@ -38,7 +38,8 @@ (define* (scheme-files directory) "Return the list of Scheme files found under DIRECTORY, recursively. The -returned list is sorted in alphabetical order." +returned list is sorted in alphabetical order. Return the empty list if +DIRECTORY is not accessible." (define (entry-type name properties) (match (assoc-ref properties 'type) ('unknown @@ -67,7 +68,15 @@ returned list is sorted in alphabetical order." (else result)))))) '() - (scandir* directory))) + (catch 'system-error + (lambda () + (scandir* directory)) + (lambda args + (let ((errno (system-error-errno args))) + (unless (= errno ENOENT) + (warning (G_ "cannot access `~a': ~a~%") + directory (strerror errno))) + '()))))) (define file-name->module-name (let ((not-slash (char-set-complement (char-set #\/)))) -- cgit v1.2.3