summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Becze <mjbecze@riseup.net>2020-01-30 11:17:00 -0500
committerHartmut Goebel <h.goebel@crazy-compilers.com>2020-12-02 22:09:23 +0100
commitd9feb23e1044b59aaa457825ab5152eaf3bc8a68 (patch)
tree612b04f0381e85ceff783f2b91bced6ee237e5a8
parent269c1db41bd82f93c7ae5c62a4969a423e556183 (diff)
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 package's metadata. 'crate-recursive-import' is also memorized since creating the same package twice will trigger a lookup on its dependencies. * guix/import/crate.scm (lookup-crate*): New procedure. (crate->guix-package): Memorize package metadata lookups. (crate-recursive-import): Memorize package creation.
-rw-r--r--guix/import/crate.scm9
1 files changed, 6 insertions, 3 deletions
diff --git a/guix/import/crate.scm b/guix/import/crate.scm
index 5498d1f0ff..c830449555 100644
--- a/guix/import/crate.scm
+++ b/guix/import/crate.scm
@@ -27,6 +27,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)
@@ -110,6 +111,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>."
@@ -215,7 +218,7 @@ version of CRATE-NAME."
(eq? (crate-dependency-kind dependency) 'normal)))
(define crate
- (lookup-crate crate-name))
+ (lookup-crate* crate-name))
(define version-number
(and crate
@@ -247,7 +250,7 @@ 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-crate-version crate req)))
(list name
@@ -276,7 +279,7 @@ 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))