~ruther/guix-local

1391dcb054f42e9ca58496db3269bee6e05f9653 — Ludovic Courtès 11 years ago 3de9a59
derivations: Memoize 'derivation-path->base16-hash'.

This reduces run time of (package-derivation s emacs) by ~10%.

* guix/derivations.scm (derivation-path->base16-hash): New procedure.
  (derivation-hash): Use it.
1 files changed, 11 insertions(+), 4 deletions(-)

M guix/derivations.scm
M guix/derivations.scm => guix/derivations.scm +11 -4
@@ 489,6 489,16 @@ in SIZE bytes."
                              (logxor o (bytevector-u8-ref bv i)))
          (loop (+ 1 i))))))

(define derivation-path->base16-hash
  (memoize
   (lambda (file)
     "Return a string containing the base16 representation of the hash of the
derivation at FILE."
     (call-with-input-file file
       (compose bytevector->base16-string
                derivation-hash
                read-derivation)))))

(define derivation-hash            ; `hashDerivationModulo' in derivations.cc
  (memoize
   (lambda (drv)


@@ 512,10 522,7 @@ in SIZE bytes."
       ;; derivation.
       (let* ((inputs (map (match-lambda
                            (($ <derivation-input> path sub-drvs)
                             (let ((hash (call-with-input-file path
                                           (compose bytevector->base16-string
                                                    derivation-hash
                                                    read-derivation))))
                             (let ((hash (derivation-path->base16-hash path)))
                               (make-derivation-input hash sub-drvs))))
                           inputs))
              (drv    (make-derivation outputs inputs sources