packages: Gracefully report packages not found.
authorLudovic Courtès <ludo@gnu.org>
Tue, 8 Mar 2016 10:48:21 +0000 (11:48 +0100)
committerLudovic Courtès <ludo@gnu.org>
Tue, 8 Mar 2016 10:48:21 +0000 (11:48 +0100)
Fixes a thinko introduced in 1b846da8c372bee78851439fd9e72b2499115e5a
that would lead to a backtrace when looking for an unknown package.

* gnu/packages.scm (%find-package): Correct logic when checking for
FALLBACK?.

gnu/packages.scm
tests/packages.scm

index 5a76e9b..bbd460a 100644 (file)
@@ -300,13 +300,15 @@ use NAME@VERSION instead~%")))
     (_
      (if version
          (leave (_ "~A: package not found for version ~a~%") name version)
-         (or fallback?
+         (if (not fallback?)
              ;; XXX: Fallback to the older specification style with an hyphen
              ;; between NAME and VERSION, for backward compatibility.
              (call-with-values
                  (lambda ()
                    (hyphen-separated-name->name+version name))
                (cut %find-package spec <> <> #:fallback? #t))
+
+             ;; The fallback case didn't find anything either, so bail out.
              (leave (_ "~A: unknown package~%") name))))))
 
 (define (specification->package spec)
index 9a2dbee..823ede1 100644 (file)
                       (guix-package "-p" (derivation->output-path prof)
                                     "--search-paths"))))))
 
+(test-equal "specification->package when not found"
+  'quit
+  (catch 'quit
+    (lambda ()
+      ;; This should call 'leave', producing an error message.
+      (specification->package "this-package-does-not-exist"))
+    (lambda (key . args)
+      key)))
+
 (test-end "packages")
 
 \f