mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
gnu: Emit a warning when a package module cannot be loaded.
* guix/ui.scm (warn-about-load-error): New procedure. * gnu/packages.scm (package-modules): Wrap 'resolve-interface' call in 'catch #t', and call 'warn-about-load-error' in handler.
This commit is contained in:
parent
1151f6aeae
commit
4ae7559fd6
2 changed files with 25 additions and 3 deletions
|
@ -160,9 +160,15 @@ (define prefix-len
|
|||
(string-length directory))
|
||||
|
||||
(filter-map (lambda (file)
|
||||
(let ((file (substring file prefix-len)))
|
||||
(false-if-exception
|
||||
(resolve-interface (file-name->module-name file)))))
|
||||
(let* ((file (substring file prefix-len))
|
||||
(module (file-name->module-name file)))
|
||||
(catch #t
|
||||
(lambda ()
|
||||
(resolve-interface module))
|
||||
(lambda args
|
||||
;; Report the error, but keep going.
|
||||
(warn-about-load-error module args)
|
||||
#f))))
|
||||
(scheme-files (if sub-directory
|
||||
(string-append directory "/" sub-directory)
|
||||
directory))))
|
||||
|
|
16
guix/ui.scm
16
guix/ui.scm
|
@ -48,6 +48,7 @@ (define-module (guix ui)
|
|||
report-error
|
||||
leave
|
||||
report-load-error
|
||||
warn-about-load-error
|
||||
show-version-and-exit
|
||||
show-bug-report-information
|
||||
string->number*
|
||||
|
@ -148,6 +149,21 @@ (define (report-load-error file args)
|
|||
(apply display-error #f (current-error-port) args)
|
||||
(exit 1))))
|
||||
|
||||
(define (warn-about-load-error file args) ;FIXME: factorize with ↑
|
||||
"Report the failure to load FILE, a user-provided Scheme file, without
|
||||
exiting. ARGS is the list of arguments received by the 'throw' handler."
|
||||
(match args
|
||||
(('system-error . _)
|
||||
(let ((err (system-error-errno args)))
|
||||
(warning (_ "failed to load '~a': ~a~%") file (strerror err))))
|
||||
(('syntax-error proc message properties form . rest)
|
||||
(let ((loc (source-properties->location properties)))
|
||||
(format (current-error-port) (_ "~a: warning: ~a~%")
|
||||
(location->string loc) message)))
|
||||
((error args ...)
|
||||
(warning (_ "failed to load '~a':~%") file)
|
||||
(apply display-error #f (current-error-port) args))))
|
||||
|
||||
(define (install-locale)
|
||||
"Install the current locale settings."
|
||||
(catch 'system-error
|
||||
|
|
Loading…
Reference in a new issue