mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 07:26:13 -05:00
derivations: Micro-optimize 'derivation'.
* guix/derivations.scm (derivation->string): New procedure. (derivation-hash, derivation): Use it. Memoization here yields a 5% improvement on "guix build -e '(@ (gnu packages emacs) emacs)' -n --no-substitutes".
This commit is contained in:
parent
2c6b7c7d55
commit
be4e38fb6f
1 changed files with 10 additions and 5 deletions
|
@ -435,6 +435,14 @@ (define (write-env-var env-var port)
|
|||
port)
|
||||
(display ")" port))))
|
||||
|
||||
(define derivation->string
|
||||
(memoize
|
||||
(lambda (drv)
|
||||
"Return the external representation of DRV as a string."
|
||||
(with-fluids ((%default-port-encoding "UTF-8"))
|
||||
(call-with-output-string
|
||||
(cut write-derivation drv <>))))))
|
||||
|
||||
(define* (derivation->output-path drv #:optional (output "out"))
|
||||
"Return the store path of its output OUTPUT."
|
||||
(let ((outputs (derivation-outputs drv)))
|
||||
|
@ -517,9 +525,7 @@ (define derivation-hash ; `hashDerivationModulo' in derivations.cc
|
|||
;; the SHA256 port's `write' method gets called for every single
|
||||
;; character.
|
||||
(sha256
|
||||
(with-fluids ((%default-port-encoding "UTF-8"))
|
||||
(string->utf8 (call-with-output-string
|
||||
(cut write-derivation drv <>)))))))))))
|
||||
(string->utf8 (derivation->string drv)))))))))
|
||||
|
||||
(define (store-path type hash name) ; makeStorePath
|
||||
"Return the store path for NAME/HASH/TYPE."
|
||||
|
@ -685,8 +691,7 @@ (define (set-file-name drv file)
|
|||
(drv (add-output-paths drv-masked)))
|
||||
|
||||
(let ((file (add-text-to-store store (string-append name ".drv")
|
||||
(call-with-output-string
|
||||
(cut write-derivation drv <>))
|
||||
(derivation->string drv)
|
||||
(map derivation-input-path
|
||||
inputs))))
|
||||
(set-file-name drv file))))
|
||||
|
|
Loading…
Reference in a new issue