~ruther/guix-local

a53ecfc897a5490744ecc1bc72cabc1d3f5c434f — Ludovic Courtès 7 years ago 2b81eac
graph: Factorize calls to 'fold-packages'.

* guix/scripts/graph.scm (all-packages): New procedure.
(%reverse-package-node-type, %reverse-bag-node-type): Use 'all-packages'
instead of 'fold-packages'.
1 files changed, 12 insertions(+), 2 deletions(-)

M guix/scripts/graph.scm
M guix/scripts/graph.scm => guix/scripts/graph.scm +12 -2
@@ 111,11 111,21 @@ name."
;;; Reverse package DAG.
;;;

(define (all-packages)            ;XXX: duplicated from (guix scripts refresh)
  "Return the list of all the distro's packages."
  (fold-packages (lambda (package result)
                   ;; Ignore deprecated packages.
                   (if (package-superseded package)
                       result
                       (cons package result)))
                 '()
                 #:select? (const #t)))           ;include hidden packages

(define %reverse-package-node-type
  ;; For this node type we first need to compute the list of packages and the
  ;; list of back-edges.  Since we want to do it only once, we use the
  ;; promises below.
  (let* ((packages   (delay (fold-packages cons '())))
  (let* ((packages   (delay (all-packages)))
         (back-edges (delay (run-with-store #f    ;store not actually needed
                              (node-back-edges %package-node-type
                                               (force packages))))))


@@ 223,7 233,7 @@ GNU-BUILD-SYSTEM have zero dependencies."
(define %reverse-bag-node-type
  ;; Type for the reverse traversal of package nodes via the "bag"
  ;; representation, which includes implicit inputs.
  (let* ((packages   (delay (package-closure (fold-packages cons '()))))
  (let* ((packages   (delay (package-closure (all-packages))))
         (back-edges (delay (run-with-store #f    ;store not actually needed
                              (node-back-edges %bag-node-type
                                               (force packages))))))