summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-01-20 09:59:56 +0100
committerLudovic Courtès <ludo@gnu.org>2015-01-20 09:59:56 +0100
commit6b1f9721a83f343315ae4b936ec9b9542ba8523e (patch)
tree371bd58e839ce54b075ce9437244404caea58494
parent310b32a2a6136a99d3c48542bf68d0d8b550f42f (diff)
downloadguix-6b1f9721a83f343315ae4b936ec9b9542ba8523e.tar.gz
packages: Mark the 'patches' field as delayed.
* guix/packages.scm (<origin>)[patches]: Mark as 'delayed'.
  (print-origin, origin->derivation): Add call to 'force' when accessing
  'patches'.
-rw-r--r--guix/packages.scm14
1 files changed, 10 insertions, 4 deletions
diff --git a/guix/packages.scm b/guix/packages.scm
index de87681fcd..96f3adfc32 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -135,7 +135,13 @@
   (method    origin-method)                       ; procedure
   (sha256    origin-sha256)                       ; bytevector
   (file-name origin-file-name (default #f))       ; optional file name
-  (patches   origin-patches (default '()))        ; list of file names
+
+  ;; Patches are delayed so that the 'search-patch' calls are made lazily,
+  ;; which reduces I/O on startup and allows patch-not-found errors to be
+  ;; gracefully handled at run time.
+  (patches   origin-patches                       ; list of file names
+             (default '()) (delayed))
+
   (snippet   origin-snippet (default #f))         ; sexp or #f
   (patch-flags  origin-patch-flags                ; list of strings
                 (default '("-p1")))
@@ -157,7 +163,7 @@
     (($ <origin> uri method sha256 file-name patches)
      (simple-format port "#<origin ~s ~a ~s ~a>"
                     uri (bytevector->base32-string sha256)
-                    patches
+                    (force patches)
                     (number->string (object-address origin) 16)))))
 
 (set-record-type-printer! <origin> print-origin)
@@ -937,10 +943,10 @@ cross-compilation target triplet."
 SOURCE is a file name, return either the interned file name (if SOURCE is
 outside of the store) or SOURCE itself (if SOURCE is already a store item.)"
   (match source
-    (($ <origin> uri method sha256 name () #f)
+    (($ <origin> uri method sha256 name (= force ()) #f)
      ;; No patches, no snippet: this is a fixed-output derivation.
      (method uri 'sha256 sha256 name #:system system))
-    (($ <origin> uri method sha256 name (patches ...) snippet
+    (($ <origin> uri method sha256 name (= force (patches ...)) snippet
         (flags ...) inputs (modules ...) (imported-modules ...)
         guile-for-build)
      ;; Patches and/or a snippet.