diff options
author | Martin Becze <mjbecze@riseup.net> | 2020-02-04 07:18:23 -0500 |
---|---|---|
committer | Guix Patches Tester <> | 2020-02-04 12:22:09 +0000 |
commit | 45b2c290e20a74d032e2b1d9fcc1823f3fa00477 (patch) | |
tree | 29fb72a2b40f38c5052f98cc2f7c221ae63caa47 | |
parent | 48970d6f042f349699000b1b16852451b189c71d (diff) | |
download | patches-45b2c290e20a74d032e2b1d9fcc1823f3fa00477.tar patches-45b2c290e20a74d032e2b1d9fcc1823f3fa00477.tar.gz |
guix: import: crate: memorize crate->guix-package
This adds memorization to procedures that involve network lookups.
(mem-lookup-crate) is used on every dependency of a package to find
it's versions. (mem-crate->guix-package) is needed becuase
(topological-sort) depduplicates after dependencies have been turned
into dependencies.
* guix/import/crate.scm (mem-crate->guix-package, mem-lookup-crate)
-rw-r--r-- | guix/import/crate.scm | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/guix/import/crate.scm b/guix/import/crate.scm index a82e5e877a..630f4d3749 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) @@ -108,6 +109,8 @@ record or #f if it was not found." (json->crate `(,@alist ("actual_versions" . ,versions)))))))) +(define mem-lookup-crate (memoize lookup-crate)) + (define (crate-version-dependencies version) "Return the list of <crate-dependency> records of VERSION, a <crate-version>." @@ -213,7 +216,7 @@ latest version of CRATE-NAME." (eq? (crate-dependency-kind dependency) 'normal))) (define crate - (lookup-crate crate-name)) + (mem-lookup-crate crate-name)) (define version-number (or version @@ -235,7 +238,7 @@ latest version of CRATE-NAME." containing pairs of (name version)" (sort (map (lambda (dep) (let* ((name (crate-dependency-id dep)) - (crate (lookup-crate name)) + (crate (mem-lookup-crate name)) (req (crate-dependency-requirement dep)) (ver (find-version crate req))) (list name @@ -262,9 +265,11 @@ latest version of CRATE-NAME." string->license)) cargo-inputs)))) +(define mem-crate->guix-package (memoize crate->guix-package)) + (define* (crate-recursive-import crate-name #:key version) (recursive-import crate-name - #:repo->guix-package crate->guix-package + #:repo->guix-package mem-crate->guix-package #:version version #:guix-name crate-name->package-name)) |