[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
06/13: DRAFT gexp: Add 'raw-derivation-closure'.
From: |
guix-commits |
Subject: |
06/13: DRAFT gexp: Add 'raw-derivation-closure'. |
Date: |
Thu, 12 Dec 2019 07:49:41 -0500 (EST) |
civodul pushed a commit to branch wip-system-bootstrap
in repository guix.
commit 6f44def508f4c2033c37ae545a1bc816b1311088
Author: Ludovic Courtès <address@hidden>
Date: Fri Dec 6 23:18:57 2019 +0100
DRAFT gexp: Add 'raw-derivation-closure'.
DRAFT: Add tests.
* guix/gexp.scm (<raw-derivation-closure>): New record type.
(sorted-references): New procedure.
(raw-derivation-closure-compiler): New gexp compiler.
---
guix/gexp.scm | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 34df49f..490679f 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -81,6 +81,9 @@
raw-derivation-file
raw-derivation-file?
+ raw-derivation-closure
+ raw-derivation-closure?
+
load-path-expression
gexp-modules
@@ -290,6 +293,35 @@ The expander specifies how an object is converted to its
sexp representation."
(derivation-file-name lowered)
lowered)))
+;; File containing the closure of a raw .drv file, in topological order. This
+;; works around a deficiency of #:references-graphs that can produce the
+;; reference graph of an output, but not that of a raw .drv file.
+(define-record-type <raw-derivation-closure>
+ (raw-derivation-closure obj)
+ raw-derivation-closure?
+ (obj raw-derivation-closure-object))
+
+(define sorted-references
+ (store-lift (lambda (store item)
+ (define (fixed-output? file)
+ (and (string-suffix? ".drv" file)
+ (let ((drv (read-derivation-from-file file)))
+ (fixed-output-derivation? drv))))
+
+ (topologically-sorted store (list item)
+ #:cut? fixed-output?))))
+
+(define-gexp-compiler (raw-derivation-closure-compiler
+ (obj <raw-derivation-closure>)
+ system target)
+ (mlet %store-monad ((obj (lower-object
+ (raw-derivation-closure-object obj)
+ system #:target target)))
+ (if (derivation? obj)
+ (mlet %store-monad ((refs (sorted-references (derivation-file-name
obj))))
+ (text-file "graph" (object->string refs)))
+ (return obj))))
+
;;;
;;; File declarations.
- branch wip-system-bootstrap created (now ba36483), guix-commits, 2019/12/12
- 01/13: utils: 'version-compare' delays 'dynamic-link' code., guix-commits, 2019/12/12
- 03/13: store: Add #:cut? parameter to 'topologically-sorted'., guix-commits, 2019/12/12
- 02/13: monads: Add portability to Guile 2.0., guix-commits, 2019/12/12
- 05/13: DRAFT gexp: Add 'raw-derivation-file'., guix-commits, 2019/12/12
- 07/13: DRAFT gexp: Add 'object-sources'., guix-commits, 2019/12/12
- 09/13: guile-build-system: Add #:implicit-inputs., guix-commits, 2019/12/12
- 12/13: DRAFT serialization: Avoid 'define-values', for the sake of Guile 2.0., guix-commits, 2019/12/12
- 10/13: gnu: Add guile-hashing., guix-commits, 2019/12/12
- 06/13: DRAFT gexp: Add 'raw-derivation-closure'.,
guix-commits <=
- 04/13: derivations: Add #:skip-dependencies? parameter to 'derivation-input-fold'., guix-commits, 2019/12/12
- 08/13: DRAFT system: Add (gnu system bootstrap)., guix-commits, 2019/12/12
- 11/13: bootstrap: Add %bootstrap-guile+guild., guix-commits, 2019/12/12
- 13/13: system: bootstrap: Compute and print the result's hash., guix-commits, 2019/12/12