diff options
author | Martin Becze <mjbecze@riseup.net> | 2020-01-30 11:17:00 -0500 |
---|---|---|
committer | Hartmut Goebel <h.goebel@crazy-compilers.com> | 2020-12-02 22:09:23 +0100 |
commit | d9feb23e1044b59aaa457825ab5152eaf3bc8a68 (patch) | |
tree | 612b04f0381e85ceff783f2b91bced6ee237e5a8 | |
parent | 269c1db41bd82f93c7ae5c62a4969a423e556183 (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.scm | 9 |
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)) |