gnu-maintenance: Optimize `gnu-package?'.

* guix/gnu-maintenance.scm (gnu-package?): Capture a memoizing version
  of `gnu-package?'.
This commit is contained in:
Ludovic Courtès 2013-04-24 23:49:05 +02:00
parent d55a99fed3
commit 65b96a0c10
1 changed files with 10 additions and 9 deletions

View File

@ -210,16 +210,17 @@
(define gnu-package? (define gnu-package?
(memoize (memoize
(lambda (package) (let ((official-gnu-packages (memoize official-gnu-packages)))
"Return true if PACKAGE is a GNU package. This procedure may access the (lambda (package)
"Return true if PACKAGE is a GNU package. This procedure may access the
network to check in GNU's database." network to check in GNU's database."
;; TODO: Find a way to determine that a package is non-GNU without going ;; TODO: Find a way to determine that a package is non-GNU without going
;; through the network. ;; through the network.
(let ((url (and=> (package-source package) origin-uri)) (let ((url (and=> (package-source package) origin-uri))
(name (package-name package))) (name (package-name package)))
(or (and (string? url) (string-prefix? "mirror://gnu" url)) (or (and (string? url) (string-prefix? "mirror://gnu" url))
(and (member name (map gnu-package-name (official-gnu-packages))) (and (member name (map gnu-package-name (official-gnu-packages)))
#t)))))) #t)))))))
;;; ;;;