guix-commits
[Top][All Lists]
Advanced

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

03/05: derivations: Raise an error when a module file is not found.


From: Ludovic Courtès
Subject: 03/05: derivations: Raise an error when a module file is not found.
Date: Tue, 22 Mar 2016 23:23:20 +0000

civodul pushed a commit to branch master
in repository guix.

commit d26e19671e2a50a25d37357aba301bef5df1818e
Author: Ludovic Courtès <address@hidden>
Date:   Tue Mar 22 15:00:53 2016 +0100

    derivations: Raise an error when a module file is not found.
    
    Suggested by Jookia.
    
    * guix/derivations.scm (&file-search-error): New error condition.
    (search-path*): Raise it when 'search-path' returns #f.
    * guix/gexp.scm (search-path*): Remove.
    * guix/ui.scm (call-with-error-handling): Add case for
    'file-search-error?'.
    * tests/derivations.scm ("build-expression->derivation and invalid
    module name"): New test.
---
 guix/derivations.scm  |   18 +++++++++++++++++-
 guix/gexp.scm         |    5 -----
 guix/ui.scm           |    5 +++++
 tests/derivations.scm |    9 +++++++++
 4 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/guix/derivations.scm b/guix/derivations.scm
index 2af65b1..2d8584e 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -90,7 +90,11 @@
             build-derivations
             built-derivations
 
+            file-search-error?
+            file-search-error-file-name
+            file-search-error-search-path
 
+            search-path*
             module->source-file-name
             build-expression->derivation)
 
@@ -1036,10 +1040,22 @@ system, imported, and appears under FINAL-PATH in the 
resulting store path."
                                   #:guile-for-build guile
                                   #:local-build? #t)))
 
+;; The "file not found" error condition.
+(define-condition-type &file-search-error &error
+  file-search-error?
+  (file     file-search-error-file-name)
+  (path     file-search-error-search-path))
+
 (define search-path*
   ;; A memoizing version of 'search-path' so 'imported-modules' does not end
   ;; up looking for the same files over and over again.
-  (memoize search-path))
+  (memoize (lambda (path file)
+             "Search for FILE in PATH and memoize the result.  Raise a
+'&file-search-error' condition if it could not be found."
+             (or (search-path path file)
+                 (raise (condition
+                         (&file-search-error (file file)
+                                             (path path))))))))
 
 (define (module->source-file-name module)
   "Return the file name corresponding to MODULE, a Guile module name (a list
diff --git a/guix/gexp.scm b/guix/gexp.scm
index c408c94..b4d737e 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -902,11 +902,6 @@ system, imported, and appears under FINAL-PATH in the 
resulting store path."
                       #:guile-for-build guile
                       #:local-build? #t)))
 
-(define search-path*
-  ;; A memoizing version of 'search-path' so 'imported-modules' does not end
-  ;; up looking for the same files over and over again.
-  (memoize search-path))
-
 (define* (imported-modules modules
                            #:key (name "module-import")
                            (system (%current-system))
diff --git a/guix/ui.scm b/guix/ui.scm
index 7b7bee0..3b1887c 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -461,6 +461,11 @@ interpreted."
              (leave (_ "reference to invalid output '~a' of derivation '~a'~%")
                     (derivation-missing-output c)
                     (derivation-file-name (derivation-error-derivation c))))
+            ((file-search-error? c)
+             (leave (_ "file '~a' could not be found in these \
+directories:~{ ~a~}~%")
+                    (file-search-error-file-name c)
+                    (file-search-error-search-path c)))
             ((message-condition? c)
              ;; Normally '&message' error conditions have an i18n'd message.
              (leave (_ "~a~%")
diff --git a/tests/derivations.scm b/tests/derivations.scm
index 4d3b82f..a52142e 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -570,6 +570,15 @@
 
 (test-skip (if (%guile-for-build) 0 8))
 
+(test-equal "build-expression->derivation and invalid module name"
+  '(file-search-error "guix/module/that/does/not/exist.scm")
+  (guard (c ((file-search-error? c)
+             (list 'file-search-error
+                   (file-search-error-file-name c))))
+    (build-expression->derivation %store "foo" #t
+                                  #:modules '((guix module that
+                                                    does not exist)))))
+
 (test-assert "build-expression->derivation and derivation-prerequisites"
   (let ((drv (build-expression->derivation %store "fail" #f)))
     (any (match-lambda



reply via email to

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