diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-07-02 22:15:35 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-07-03 00:39:10 +0200 |
commit | 24420f5ffabfbdbe913a5765e5c00e17de18fb4c (patch) | |
tree | 24dd51825a54c9cee2d111683b65d87fefa84d27 | |
parent | c729901583981381ef04f3be57b28e92bd81090b (diff) |
packages: Optimize 'package-transitive-supported-systems'.
This version is 13% faster than the one above when timing:
(fold-packages (lambda (p x)
(package-transitive-supported-systems p))
'())
* guix/packages.scm (package-transitive-supported-systems): Make
'systems' a set instead of calling 'lset-intersection' repeatedly.
-rw-r--r-- | guix/packages.scm | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/guix/packages.scm b/guix/packages.scm index c762fa7c39..cd7d3b895c 100644 --- a/guix/packages.scm +++ b/guix/packages.scm @@ -766,15 +766,16 @@ in INPUTS and their transitive propagated inputs." (mlambdaq (package) "Return the intersection of the systems supported by PACKAGE and those supported by its dependencies." - (fold (lambda (input systems) - (match input - ((label (? package? p) . _) - (lset-intersection - string=? systems (package-transitive-supported-systems p))) - (_ - systems))) - (package-supported-systems package) - (bag-direct-inputs (package->bag package))))) + (set->list + (fold (lambda (input systems) + (match input + ((label (? package? p) . _) + (fold set-insert systems + (package-transitive-supported-systems p))) + (_ + systems))) + (list->set (package-supported-systems package)) + (bag-direct-inputs (package->bag package)))))) (define* (supported-package? package #:optional (system (%current-system))) "Return true if PACKAGE is supported on SYSTEM--i.e., if PACKAGE and all its |