guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/05: derivations: Split 'derivation-hash' in two procedures.


From: Ludovic Courtès
Subject: 01/05: derivations: Split 'derivation-hash' in two procedures.
Date: Wed, 13 Dec 2017 17:12:09 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit eb1150c22c2175fbcf834b9f5164ef0d693df3cf
Author: Ludovic Courtès <address@hidden>
Date:   Wed Dec 13 14:00:20 2017 +0100

    derivations: Split 'derivation-hash' in two procedures.
    
    * guix/derivations.scm (derivation/masked-inputs): New procedure.
    (derivation-hash): Use it instead of the inline code.
---
 guix/derivations.scm | 45 ++++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/guix/derivations.scm b/guix/derivations.scm
index b958497..bb18ce6 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -632,6 +632,24 @@ derivation at FILE."
     (bytevector->base16-string
      (derivation-hash (read-derivation-from-file file)))))
 
+(define (derivation/masked-inputs drv)
+  "Assuming DRV is a regular derivation (not fixed-output), replace the file
+name of each input with that input's hash."
+  (match drv
+    (($ <derivation> outputs inputs sources
+                     system builder args env-vars)
+     (let ((inputs (map (match-lambda
+                          (($ <derivation-input> path sub-drvs)
+                           (let ((hash (derivation-path->base16-hash path)))
+                             (make-derivation-input hash sub-drvs))))
+                        inputs)))
+       (make-derivation outputs
+                        (sort (coalesce-duplicate-inputs inputs)
+                              derivation-input<?)
+                        sources
+                        system builder args env-vars
+                        #f)))))
+
 (define derivation-hash            ; `hashDerivationModulo' in derivations.cc
   (mlambda (drv)
     "Return the hash of DRV, modulo its fixed-output inputs, as a bytevector."
@@ -647,27 +665,12 @@ derivation at FILE."
                         (symbol->string hash-algo)
                         ":" (bytevector->base16-string hash)
                         ":" path))))
-      (($ <derivation> outputs inputs sources
-                       system builder args env-vars)
-       ;; A regular derivation: replace the path of each input with that
-       ;; input's hash; return the hash of serialization of the resulting
-       ;; derivation.
-       (let* ((inputs (map (match-lambda
-                             (($ <derivation-input> path sub-drvs)
-                              (let ((hash (derivation-path->base16-hash path)))
-                                (make-derivation-input hash sub-drvs))))
-                           inputs))
-              (drv    (make-derivation outputs
-                                       (sort (coalesce-duplicate-inputs inputs)
-                                             derivation-input<?)
-                                       sources
-                                       system builder args env-vars
-                                       #f)))
-
-         ;; XXX: At this point this remains faster than `port-sha256', because
-         ;; the SHA256 port's `write' method gets called for every single
-         ;; character.
-         (sha256 (derivation->bytevector drv)))))))
+      (_
+
+       ;; XXX: At this point this remains faster than `port-sha256', because
+       ;; the SHA256 port's `write' method gets called for every single
+       ;; character.
+       (sha256 (derivation->bytevector (derivation/masked-inputs drv)))))))
 
 (define* (derivation store name builder args
                      #:key



reply via email to

[Prev in Thread] Current Thread [Next in Thread]