~ruther/guix-local

65b96a0c10abf88dbdf1668e15d5af0120dc92f7 — Ludovic Courtès 13 years ago d55a99f
gnu-maintenance: Optimize `gnu-package?'.

* guix/gnu-maintenance.scm (gnu-package?): Capture a memoizing version
  of `gnu-package?'.
1 files changed, 10 insertions(+), 9 deletions(-)

M guix/gnu-maintenance.scm
M guix/gnu-maintenance.scm => guix/gnu-maintenance.scm +10 -9
@@ 210,16 210,17 @@

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


;;;