guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/03: pull: Catch '&missing-dependency-error' raised by 'source-module-


From: Ludovic Courtès
Subject: 03/03: pull: Catch '&missing-dependency-error' raised by 'source-module-closure'.
Date: Thu, 25 May 2017 08:30:09 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 20ed093977cc80ba1729c38e05ae7955a38069a6
Author: Ludovic Courtès <address@hidden>
Date:   Thu May 25 14:21:04 2017 +0200

    pull: Catch '&missing-dependency-error' raised by 'source-module-closure'.
    
    Fixes <http://bugs.gnu.org/26987>.
    Reported by Mathieu Othacehe <address@hidden>.
    
    * guix/build/pull.scm (depends-on-guile-ssh?): Remove.
    (has-all-its-dependencies?): New procedure.
    (build-guix): Use it to filter source files.
---
 guix/build/pull.scm | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/guix/build/pull.scm b/guix/build/pull.scm
index d2e0404..03b0f92 100644
--- a/guix/build/pull.scm
+++ b/guix/build/pull.scm
@@ -28,6 +28,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
   #:export (build-guix))
 
 ;;; Commentary:
@@ -36,13 +37,18 @@
 ;;;
 ;;; Code:
 
-(define (depends-on-guile-ssh? file)
-  "Return true if FILE is a Scheme source file that depends, directly or
-indirectly, on Guile-SSH."
-  (find (match-lambda
-          (('ssh _ ...) #t)
-          (_ #f))
-        (source-module-closure file #:select? (const #t))))
+(define (has-all-its-dependencies? file)
+  "Return true if the dependencies of the module defined in FILE are
+available, false otherwise."
+  (let ((module (call-with-input-file file
+                  (lambda (port)
+                    (match (read port)
+                      (('define-module name _ ...)
+                       name))))))
+    ;; If one of the dependencies of MODULE is missing, we get a
+    ;; '&missing-dependency-error'.
+    (guard (c ((missing-dependency-error? c) #f))
+      (source-module-closure (list module) #:select? (const #t)))))
 
 (define (all-scheme-files directory)
   "Return a sorted list of Scheme files found in DIRECTORY."
@@ -145,10 +151,7 @@ containing the source code.  Write any debugging output to 
DEBUG-PORT."
     ;; Compile the .scm files.  Load all the files before compiling them to
     ;; work around <http://bugs.gnu.org/15602> (FIXME).
     ;; Filter out files depending on Guile-SSH when Guile-SSH is missing.
-    (let* ((files (remove (if (false-if-exception
-                               (resolve-interface '(ssh session)))
-                              (const #f)
-                              depends-on-guile-ssh?)
+    (let* ((files (filter has-all-its-dependencies?
                           (all-scheme-files out)))
            (total (length files)))
       (let loop ((files files)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]