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.
This commit is contained in:
parent
c729901583
commit
24420f5ffa
|
@ -766,15 +766,16 @@ in INPUTS and their transitive propagated inputs."
|
||||||
(mlambdaq (package)
|
(mlambdaq (package)
|
||||||
"Return the intersection of the systems supported by PACKAGE and those
|
"Return the intersection of the systems supported by PACKAGE and those
|
||||||
supported by its dependencies."
|
supported by its dependencies."
|
||||||
|
(set->list
|
||||||
(fold (lambda (input systems)
|
(fold (lambda (input systems)
|
||||||
(match input
|
(match input
|
||||||
((label (? package? p) . _)
|
((label (? package? p) . _)
|
||||||
(lset-intersection
|
(fold set-insert systems
|
||||||
string=? systems (package-transitive-supported-systems p)))
|
(package-transitive-supported-systems p)))
|
||||||
(_
|
(_
|
||||||
systems)))
|
systems)))
|
||||||
(package-supported-systems package)
|
(list->set (package-supported-systems package))
|
||||||
(bag-direct-inputs (package->bag package)))))
|
(bag-direct-inputs (package->bag package))))))
|
||||||
|
|
||||||
(define* (supported-package? package #:optional (system (%current-system)))
|
(define* (supported-package? package #:optional (system (%current-system)))
|
||||||
"Return true if PACKAGE is supported on SYSTEM--i.e., if PACKAGE and all its
|
"Return true if PACKAGE is supported on SYSTEM--i.e., if PACKAGE and all its
|
||||||
|
|
Loading…
Reference in New Issue