[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)))
;;;