guix-commits
[Top][All Lists]
Advanced

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

03/09: import: crate: Memorize crate->guix-package.


From: guix-commits
Subject: 03/09: import: crate: Memorize crate->guix-package.
Date: Sun, 5 Apr 2020 13:36:21 -0400 (EDT)

lfam pushed a commit to branch wip-rav1e
in repository guix.

commit efa3440eafd299b1b91fddcebaed007a2d69fd3a
Author: Martin Becze <address@hidden>
AuthorDate: Thu Jan 30 11:17:00 2020 -0500

    import: crate: Memorize crate->guix-package.
    
    This adds memorization to procedures that involve network lookups.
    'lookup-crate*' is used on every dependency of a package to get its version
    list. It is also used to lookup a packages metadata. 
'crate-recursive-import'
    is also memorized since creating the same package twice will trigger a 
lookup
    on in its dependencies.
    
    * guix/import/crate.scm (lookup-crate*): New procedure.
      (crate->guix-package): Memorize package metadata lookups.
      (crate-recursive-import): Memorize package creation.
    
    Signed-off-by: Leo Famulari <address@hidden>
---
 guix/import/crate.scm | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/guix/import/crate.scm b/guix/import/crate.scm
index 6338937..96cf8d9 100644
--- a/guix/import/crate.scm
+++ b/guix/import/crate.scm
@@ -28,6 +28,7 @@
   #:use-module (guix import json)
   #:use-module (guix import utils)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix memoization)
   #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix upstream)
@@ -111,6 +112,8 @@ record or #f if it was not found."
                (json->crate `(,@alist
                               ("actual_versions" . ,versions))))))))
 
+(define lookup-crate* (memoize lookup-crate))
+
 (define (crate-version-dependencies version)
   "Return the list of <crate-dependency> records of VERSION, a
 <crate-version>."
@@ -216,7 +219,7 @@ latest version of CRATE-NAME."
         (eq? (crate-dependency-kind dependency) 'normal)))
 
   (define crate
-    (lookup-crate crate-name))
+    (lookup-crate* crate-name))
 
   (define version-number
     (or version
@@ -238,7 +241,7 @@ latest version of CRATE-NAME."
   (define (sort-map-dependencies deps)
     (sort (map (lambda (dep)
                  (let* ((name (crate-dependency-id dep))
-                        (crate (lookup-crate name))
+                        (crate (lookup-crate* name))
                         (req (crate-dependency-requirement dep))
                         (ver (find-version crate req)))
                    (list name
@@ -267,7 +270,7 @@ latest version of CRATE-NAME."
 
 (define* (crate-recursive-import crate-name #:key version)
   (recursive-import crate-name
-                    #:repo->guix-package crate->guix-package
+                    #:repo->guix-package (memoize crate->guix-package)
                     #:version version
                     #:guix-name crate-name->package-name))
 



reply via email to

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