[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/02: guix: packages: Add package-direct-sources and package-transitive
From: |
Eric Bavier |
Subject: |
01/02: guix: packages: Add package-direct-sources and package-transitive-sources. |
Date: |
Sun, 03 May 2015 04:13:29 +0000 |
bavier pushed a commit to branch master
in repository guix.
commit f77bcbc374bb94272c57508dc04fb8599b56a9d8
Author: Eric Bavier <address@hidden>
Date: Fri Apr 24 07:57:51 2015 -0500
guix: packages: Add package-direct-sources and package-transitive-sources.
* guix/tests.scm (dummy-origin): New syntax.
* guix/packages.scm (package-direct-sources)
(package-transitive-sources): New procedures.
* tests/packages.scm ("package-direct-sources, no source")
("package-direct-sources, #f source")
("package-direct-sources, not input source", "package-direct-sources")
("package-transitive-sources"): Test them.
---
guix/packages.scm | 24 ++++++++++++++++++++++++
guix/tests.scm | 10 +++++++++-
tests/packages.scm | 30 ++++++++++++++++++++++++++++++
3 files changed, 63 insertions(+), 1 deletions(-)
diff --git a/guix/packages.scm b/guix/packages.scm
index b7a1979..d7fced8 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -83,6 +83,8 @@
package-location
package-field-location
+ package-direct-sources
+ package-transitive-sources
package-direct-inputs
package-transitive-inputs
package-transitive-target-inputs
@@ -540,6 +542,28 @@ IMPORTED-MODULES specify modules to use/import for use by
SNIPPET."
((input rest ...)
(loop rest (cons input result))))))
+(define (package-direct-sources package)
+ "Return all source origins associated with PACKAGE; including origins in
+PACKAGE's inputs."
+ `(,@(or (and=> (package-source package) list) '())
+ ,@(filter-map (match-lambda
+ ((_ (? origin? orig) _ ...)
+ orig)
+ (_ #f))
+ (package-direct-inputs package))))
+
+(define (package-transitive-sources package)
+ "Return PACKAGE's direct sources, and their direct sources, recursively."
+ (delete-duplicates
+ (concatenate (filter-map (match-lambda
+ ((_ (? origin? orig) _ ...)
+ (list orig))
+ ((_ (? package? p) _ ...)
+ (package-direct-sources p))
+ (_ #f))
+ (bag-transitive-inputs
+ (package->bag package))))))
+
(define (package-direct-inputs package)
"Return all the direct inputs of PACKAGE---i.e, its direct inputs along
with their propagated inputs."
diff --git a/guix/tests.scm b/guix/tests.scm
index 080ee9c..87e6cc2 100644
--- a/guix/tests.scm
+++ b/guix/tests.scm
@@ -37,7 +37,8 @@
%substitute-directory
with-derivation-narinfo
with-derivation-substitute
- dummy-package))
+ dummy-package
+ dummy-origin))
;;; Commentary:
;;;
@@ -219,6 +220,13 @@ initialized with default values, and with EXTRA-FIELDS set
as specified."
(synopsis #f) (description #f)
(home-page #f) (license #f)))
+(define-syntax-rule (dummy-origin extra-fields ...)
+ "Return a \"dummy\" origin, with all its compulsory fields initialized with
+default values, and with EXTRA-FIELDS set as specified."
+ (origin extra-fields ...
+ (method #f) (uri "http://www.example.com")
+ (sha256 (base32 (make-string 52 #\x)))))
+
;; Local Variables:
;; eval: (put 'call-with-derivation-narinfo 'scheme-indent-function 1)
;; eval: (put 'call-with-derivation-substitute 'scheme-indent-function 2)
diff --git a/tests/packages.scm b/tests/packages.scm
index 4e52813..511ad78 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -155,6 +155,36 @@
(package-transitive-supported-systems d)
(package-transitive-supported-systems e))))
+(let* ((o (dummy-origin))
+ (u (dummy-origin))
+ (i (dummy-origin))
+ (a (dummy-package "a"))
+ (b (dummy-package "b"
+ (inputs `(("a" ,a) ("i" ,i)))))
+ (c (package (inherit b) (source o)))
+ (d (dummy-package "d"
+ (build-system trivial-build-system)
+ (source u) (inputs `(("c" ,c))))))
+ (test-assert "package-direct-sources, no source"
+ (null? (package-direct-sources a)))
+ (test-equal "package-direct-sources, #f source"
+ (list i)
+ (package-direct-sources b))
+ (test-equal "package-direct-sources, not input source"
+ (list u)
+ (package-direct-sources d))
+ (test-assert "package-direct-sources"
+ (let ((s (package-direct-sources c)))
+ (and (= (length (pk 's-sources s)) 2)
+ (member o s)
+ (member i s))))
+ (test-assert "package-transitive-sources"
+ (let ((s (package-transitive-sources d)))
+ (and (= (length (pk 'd-sources s)) 3)
+ (member o s)
+ (member i s)
+ (member u s)))))
+
(test-equal "package-transitive-supported-systems, implicit inputs"
%supported-systems