summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-03-26 23:42:59 +0200
committerLudovic Courtès <ludo@gnu.org>2018-04-08 17:48:33 +0200
commit3c0128b035ae00462f1b0a4427d9525d750e5575 (patch)
tree25662dd9ece22bd479764a5bada10a622a27d788
parent2cfc8d69644af6c53fed9128425e8ff70ad4509f (diff)
downloadguix-3c0128b035ae00462f1b0a4427d9525d750e5575.tar.gz
discovery: Remove dependency on (guix ui).
This reduces the closure of (guix discovery) from 28 to 8 modules.

* guix/discovery.scm (scheme-files): Use 'format' instead of 'warning'.
(scheme-modules): Add #:warn parameter.  Use it instead of
'warn-about-load-error'.
(fold-modules): Add #:warn and pass it to 'scheme-modules'.
(all-modules): Likewise.
* gnu/bootloader.scm (bootloader-modules): Pass #:warn to 'all-modules'.
* gnu/packages.scm (fold-packages): Likewise.
* gnu/services.scm (all-service-modules): Likewise.
* guix/upstream.scm (importer-modules): Likewise.
-rw-r--r--gnu/bootloader.scm3
-rw-r--r--gnu/packages.scm6
-rw-r--r--gnu/services.scm3
-rw-r--r--guix/discovery.scm28
-rw-r--r--guix/upstream.scm5
5 files changed, 28 insertions, 17 deletions
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
index 736f119527..4f2c71cb5a 100644
--- a/gnu/bootloader.scm
+++ b/gnu/bootloader.scm
@@ -146,7 +146,8 @@
   "Return the list of bootloader modules."
   (all-modules (map (lambda (entry)
                       `(,entry . "gnu/bootloader"))
-                    %load-path)))
+                    %load-path)
+               #:warn warn-about-load-error))
 
 (define %bootloaders
   ;; The list of publically-known bootloaders.
diff --git a/gnu/packages.scm b/gnu/packages.scm
index 44a56dfde0..1a37a17342 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
@@ -159,7 +159,9 @@ for system '~a'")
 
 (define* (fold-packages proc init
                         #:optional
-                        (modules (all-modules (%package-module-path)))
+                        (modules (all-modules (%package-module-path)
+                                              #:warn
+                                              warn-about-load-error))
                         #:key (select? (negate hidden-package?)))
   "Call (PROC PACKAGE RESULT) for each available package defined in one of
 MODULES that matches SELECT?, using INIT as the initial value of RESULT.  It
diff --git a/gnu/services.scm b/gnu/services.scm
index 2fcacb9eb4..81af4df849 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -181,7 +181,8 @@
 (define (all-service-modules)
   "Return the default set of service modules."
   (cons (resolve-interface '(gnu services))
-        (all-modules (%service-type-path))))
+        (all-modules (%service-type-path)
+                     #:warn warn-about-load-error)))
 
 (define* (fold-service-types proc seed
                              #:optional
diff --git a/guix/discovery.scm b/guix/discovery.scm
index 8ffcf7cd9a..2b627d108e 100644
--- a/guix/discovery.scm
+++ b/guix/discovery.scm
@@ -17,7 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix discovery)
-  #:use-module (guix ui)
+  #:use-module (guix i18n)
   #:use-module (guix modules)
   #:use-module (guix combinators)
   #:use-module (guix build syscalls)
@@ -86,13 +86,18 @@ DIRECTORY is not accessible."
                 (lambda args
                   (let ((errno (system-error-errno args)))
                     (unless (= errno ENOENT)
-                      (warning (G_ "cannot access `~a': ~a~%")
-                               directory (strerror errno)))
+                      (format (current-error-port) ;XXX
+                              (G_ "cannot access `~a': ~a~%")
+                              directory (strerror errno)))
                     '())))))
 
-(define* (scheme-modules directory #:optional sub-directory)
+(define* (scheme-modules directory #:optional sub-directory
+                         #:key (warn (const #f)))
   "Return the list of Scheme modules available under DIRECTORY.
-Optionally, narrow the search to SUB-DIRECTORY."
+Optionally, narrow the search to SUB-DIRECTORY.
+
+WARN is called when a module could not be loaded.  It is passed the module
+name and the exception key and arguments."
   (define prefix-len
     (string-length directory))
 
@@ -104,31 +109,32 @@ Optionally, narrow the search to SUB-DIRECTORY."
                       (resolve-interface module))
                     (lambda args
                       ;; Report the error, but keep going.
-                      (warn-about-load-error module args)
+                      (warn module args)
                       #f))))
               (scheme-files (if sub-directory
                                 (string-append directory "/" sub-directory)
                                 directory))))
 
-(define (fold-modules proc init path)
+(define* (fold-modules proc init path #:key (warn (const #f)))
   "Fold over all the Scheme modules present in PATH, a list of directories.
 Call (PROC MODULE RESULT) for each module that is found."
   (fold (lambda (spec result)
           (match spec
             ((? string? directory)
-             (fold proc result (scheme-modules directory)))
+             (fold proc result (scheme-modules directory #:warn warn)))
             ((directory . sub-directory)
              (fold proc result
-                   (scheme-modules directory sub-directory)))))
+                   (scheme-modules directory sub-directory
+                                   #:warn warn)))))
         '()
         path))
 
-(define (all-modules path)
+(define* (all-modules path #:key (warn (const #f)))
   "Return the list of package modules found in PATH, a list of directories to
 search.  Entries in PATH can be directory names (strings) or (DIRECTORY
 . SUB-DIRECTORY) pairs, in which case modules are searched for beneath
 SUB-DIRECTORY."
-  (fold-modules cons '() path))
+  (fold-modules cons '() path #:warn warn))
 
 (define (fold-module-public-variables proc init modules)
   "Call (PROC OBJECT RESULT) for each variable exported by one of MODULES,
diff --git a/guix/upstream.scm b/guix/upstream.scm
index caaa0e44e4..9e1056f7a7 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -153,7 +153,8 @@ correspond to the same version."
   (cons (resolve-interface '(guix gnu-maintenance))
         (all-modules (map (lambda (entry)
                             `(,entry . "guix/import"))
-                          %load-path))))
+                          %load-path)
+                     #:warn warn-about-load-error)))
 
 (define %updaters
   ;; The list of publically-known updaters.