channels: Call 'build-self.scm' procedure with a trivial build handler.

Previously, "TESTS=installed-os guix build -m etc/system-tests.scm"
would repeat the "Computing Guix derivation" phase ~5 times due to the
fact that there were several call paths, within a build-accumulator,
leading to (package-derivation store guix).

* guix/channels.scm (with-trivial-build-handler): New procedure.
(build-from-source): Wrap 'build' call in 'with-trivial-build-handler'.
This commit is contained in:
Ludovic Courtès 2020-04-06 23:21:43 +02:00
parent a4c4aaff9e
commit 42a87136f0
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -349,6 +349,15 @@ (define* (guile-for-source source #:optional (quirks %quirks))
(((predicate . guile) rest ...)
(if (predicate source) (guile) (loop rest))))))
(define (with-trivial-build-handler mvalue)
"Run MVALUE, a monadic value, with a \"trivial\" build handler installed
that unconditionally resumes the continuation."
(lambda (store)
(with-build-handler (lambda (continue . _)
(continue #t))
(values (run-with-store store mvalue)
store))))
(define* (build-from-source name source
#:key core verbose? commit
(dependencies '()))
@ -381,8 +390,14 @@ (define script
(mbegin %store-monad
(mwhen guile
(set-guile-for-build guile))
(build source #:verbose? verbose? #:version commit
#:pull-version %pull-version)))
;; BUILD is usually quite costly. Install a "trivial" build handler
;; so we don't bounce an outer build-accumulator handler that could
;; cause us to redo half of the BUILD computation several times just
;; to realize it gives the same result.
(with-trivial-build-handler
(build source #:verbose? verbose? #:version commit
#:pull-version %pull-version))))
;; Build a set of modules that extend Guix using the standard method.
(standard-module-derivation name source core dependencies)))