diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-03-08 12:25:25 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-03-08 12:31:38 +0100 |
commit | 4035fcba93aaf551f4b5698045f025aa61287e17 (patch) | |
tree | 313f6b30c575a2078c306ba86635b65110994228 | |
parent | 910aaa3b8646b6dfea5cab6ed8da3fc549a2dd70 (diff) | |
download | patches-4035fcba93aaf551f4b5698045f025aa61287e17.tar patches-4035fcba93aaf551f4b5698045f025aa61287e17.tar.gz |
channels: Do not fail when the inferior lacks 'guix repl'.
Fixes <https://bugs.gnu.org/34637>.
Reported by Martin Flack <martin.flack@gmail.com>.
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.
-rw-r--r-- | guix/channels.scm | 6 | ||||
-rw-r--r-- | guix/inferior.scm | 27 |
2 files changed, 29 insertions, 4 deletions
diff --git a/guix/channels.scm b/guix/channels.scm index 96d62ce062..9658cf9393 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 027418a98d..63c95141d7 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))) ;;; |