~ruther/guix-local

f9efe568c3cd46f0aecb5bdd35731e98a29dbcea — Ludovic Courtès 11 years ago 4b23c46
gexp: Aggregate outputs of compound gexps.

* guix/gexp.scm (gexp-outputs)[add-reference-output]: Recurse into
  lists.
* tests/gexp.scm ("output list + ungexp-splicing list, combined gexps"):
  New test.
2 files changed, 13 insertions(+), 3 deletions(-)

M guix/gexp.scm
M tests/gexp.scm
M guix/gexp.scm => guix/gexp.scm +3 -3
@@ 314,12 314,12 @@ references."
       (cons name result))
      ((? gexp? exp)
       (append (gexp-outputs exp) result))
      ((lst ...)
       (fold-right add-reference-output result lst))
      (_
       result)))

  (fold-right add-reference-output
              '()
              (gexp-references exp)))
  (add-reference-output (gexp-references exp) '()))

(define* (gexp->sexp exp #:key
                     (system (%current-system))

M tests/gexp.scm => tests/gexp.scm +10 -0
@@ 230,6 230,16 @@
                (gexp-outputs exp2))
         (= 2 (length (gexp-outputs exp2))))))

(test-assert "output list + ungexp-splicing list, combined gexps"
  (let* ((exp0  (gexp (mkdir (ungexp output))))
         (exp1  (gexp (mkdir (ungexp output "foo"))))
         (exp2  (gexp (begin (display "hi!")
                             (ungexp-splicing (list exp0 exp1))))))
    (and (lset= equal?
                (append (gexp-outputs exp0) (gexp-outputs exp1))
                (gexp-outputs exp2))
         (= 2 (length (gexp-outputs exp2))))))

(test-assertm "gexp->file"
  (mlet* %store-monad ((exp -> (gexp (display (ungexp %bootstrap-guile))))
                       (guile  (package-file %bootstrap-guile))