guix-commits
[Top][All Lists]
Advanced

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

03/03: channels: Do not fail when the inferior lacks 'guix repl'.


From: guix-commits
Subject: 03/03: channels: Do not fail when the inferior lacks 'guix repl'.
Date: Fri, 8 Mar 2019 06:34:56 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit 4035fcba93aaf551f4b5698045f025aa61287e17
Author: Ludovic Courtès <address@hidden>
Date:   Fri Mar 8 12:25:25 2019 +0100

    channels: Do not fail when the inferior lacks 'guix repl'.
    
    Fixes <https://bugs.gnu.org/34637>.
    Reported by Martin Flack <address@hidden>.
    
    Previously we'd fail to build the package cache for old versions of Guix
    that lack 'guix repl'.  Now we simply ignore the issue and keep going
    without a cache.
    
    * guix/inferior.scm (gexp->derivation-in-inferior): Add
     #:silent-failure? and honor it.
    [drop-extra-keyword]: New procedure.
    Use it.
    * guix/channels.scm (package-cache-file): Pass #:silent-failure? #t.
---
 guix/channels.scm |  6 ++++++
 guix/inferior.scm | 27 +++++++++++++++++++++++----
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/guix/channels.scm b/guix/channels.scm
index 96d62ce..9658cf9 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -477,6 +477,12 @@ be used as a profile hook."
 
     (gexp->derivation-in-inferior "guix-package-cache" build
                                   profile
+
+                                  ;; If the Guix in PROFILE is too old and
+                                  ;; lacks 'guix repl', don't build the cache
+                                  ;; instead of failing.
+                                  #:silent-failure? #t
+
                                   #:properties '((type . profile-hook)
                                                  (hook . package-cache))
                                   #:local-build? #t)))
diff --git a/guix/inferior.scm b/guix/inferior.scm
index 027418a..63c9514 100644
--- a/guix/inferior.scm
+++ b/guix/inferior.scm
@@ -513,10 +513,15 @@ PACKAGE must be live."
   (inferior-package->derivation package system #:target target))
 
 (define* (gexp->derivation-in-inferior name exp guix
+                                       #:key silent-failure?
+                                       #:allow-other-keys
                                        #:rest rest)
   "Return a derivation that evaluates EXP with GUIX, an instance of Guix as
 returned for example by 'channel-instances->derivation'.  Other arguments are
-passed as-is to 'gexp->derivation'."
+passed as-is to 'gexp->derivation'.
+
+When SILENT-FAILURE? is true, create an empty output directory instead of
+failing when GUIX is too old and lacks the 'guix repl' command."
   (define script
     ;; EXP wrapped with a proper (set! %load-path …) prologue.
     (scheme-file "inferior-script.scm" exp))
@@ -539,9 +544,23 @@ passed as-is to 'gexp->derivation'."
           (write `(primitive-load #$script) pipe)
 
           (unless (zero? (close-pipe pipe))
-            (error "inferior failed" #+guix)))))
-
-  (apply gexp->derivation name trampoline rest))
+            (if #$silent-failure?
+                (mkdir #$output)
+                (error "inferior failed" #+guix))))))
+
+  (define (drop-extra-keyword lst)
+    (let loop ((lst lst)
+               (result '()))
+      (match lst
+        (()
+         (reverse result))
+        ((#:silent-failure? _ . rest)
+         (loop rest result))
+        ((kw value . tail)
+         (loop tail (cons* value kw result))))))
+
+  (apply gexp->derivation name trampoline
+         (drop-extra-keyword rest)))
 
 
 ;;;



reply via email to

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