[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
10/12: guix system: Add '--derivation'.
From: |
Ludovic Courtès |
Subject: |
10/12: guix system: Add '--derivation'. |
Date: |
Thu, 08 Oct 2015 21:47:33 +0000 |
civodul pushed a commit to branch wip-service-refactor
in repository guix.
commit 2bd950b6f2e556fa7513093485f5bec50e5767f4
Author: Ludovic Courtès <address@hidden>
Date: Sat Sep 19 11:14:42 2015 +0200
guix system: Add '--derivation'.
* guix/scripts/system.scm (perform-action): Add #:derivations-only?
parameter and honor it.
(show-help, %options): Add '--derivation'.
(guix-system): Pass #:derivations-only? to 'perform-action'.
* tests/guix-system.sh: Test it.
* doc/guix.texi (Invoking guix system): Document it.
---
doc/guix.texi | 5 +++++
guix/scripts/system.scm | 30 +++++++++++++++++++++++-------
tests/guix-system.sh | 6 ++++++
3 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 507365e..ef78ab4 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -6920,6 +6920,11 @@ using the following command:
Attempt to build for @var{system} instead of the host's system type.
This works as per @command{guix build} (@pxref{Invoking guix build}).
address@hidden --derivation
address@hidden -d
+Return the derivation file name of the given operating system without
+building anything.
+
@item address@hidden
For the @code{vm-image} and @code{disk-image} actions, create an image
of the given @var{size}. @var{size} may be a number of bytes, or it may
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 5e2d226..71b92da 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -300,7 +300,7 @@ it atomically, and then run OS's activation script."
(system-disk-image os #:disk-image-size image-size))))
(define* (perform-action action os
- #:key grub? dry-run?
+ #:key grub? dry-run? derivations-only?
use-substitutes? device target
image-size full-boot?
(mappings '()))
@@ -308,7 +308,13 @@ it atomically, and then run OS's activation script."
the target devices for GRUB; TARGET is the target root directory; IMAGE-SIZE
is the size of the image to be built, for the 'vm-image' and 'disk-image'
actions. FULL-BOOT? is used for the 'vm' action; it determines whether to
-boot directly to the kernel or to the bootloader."
+boot directly to the kernel or to the bootloader.
+
+When DERIVATIONS-ONLY? is true, print the derivation file name(s) without
+building anything."
+ (define println
+ (cut format #t "~a~%" <>))
+
(mlet* %store-monad
((sys (system-derivation-for-action os action
#:image-size image-size
@@ -322,14 +328,17 @@ boot directly to the kernel or to the bootloader."
(drvs -> (if (and grub? (memq action '(init reconfigure)))
(list sys grub grub.cfg)
(list sys)))
- (% (maybe-build drvs #:dry-run? dry-run?
- #:use-substitutes? use-substitutes?)))
+ (% (if derivations-only?
+ (return (for-each (compose println derivation-file-name)
+ drvs))
+ (maybe-build drvs #:dry-run? dry-run?
+ #:use-substitutes? use-substitutes?))))
- (if dry-run?
+ (if (or dry-run? derivations-only?)
(return #f)
(begin
- (for-each (cut format #t "~a~%" <>)
- (map derivation->output-path drvs))
+ (for-each (compose println derivation->output-path)
+ drvs)
;; Make sure GRUB is accessible.
(when grub?
@@ -383,6 +392,8 @@ Build the operating system declared in FILE according to
ACTION.\n"))
(show-build-options-help)
(display (_ "
+ -d, --derivation return the derivation of the given system"))
+ (display (_ "
--on-error=STRATEGY
apply STRATEGY when an error occurs while reading
FILE"))
(display (_ "
@@ -425,6 +436,9 @@ Build the operating system declared in FILE according to
ACTION.\n"))
(option '(#\V "version") #f #f
(lambda args
(show-version-and-exit "guix system")))
+ (option '(#\d "derivation") #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'derivations-only? #t result)))
(option '("on-error") #t #f
(lambda (opt name arg result)
(alist-cons 'on-error (string->symbol arg)
@@ -549,6 +563,8 @@ Build the operating system declared in FILE according to
ACTION.\n"))
(set-guile-for-build (default-guile))
(perform-action action os
#:dry-run? dry?
+ #:derivations-only? (assoc-ref opts
+ 'derivations-only?)
#:use-substitutes? (assoc-ref opts 'substitutes?)
#:image-size (assoc-ref opts 'image-size)
#:full-boot? (assoc-ref opts 'full-boot?)
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index 4289db2..d99c9bd 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -132,6 +132,12 @@ EOF
make_user_config "users" "wheel"
guix system build "$tmpfile" -n # succeeds
+guix system build "$tmpfile" -d # succeeds
+guix system build "$tmpfile" -d | grep '\.drv$'
+
+guix system vm "$tmpfile" -d # succeeds
+guix system vm "$tmpfile" -d | grep '\.drv$'
+
make_user_config "group-that-does-not-exist" "users"
if guix system build "$tmpfile" -n 2> "$errorfile"
then false
- 02/12: gexp: Add 'program-file'., (continued)
- 02/12: gexp: Add 'program-file'., Ludovic Courtès, 2015/10/08
- 08/12: gexp: Add 'scheme-file'., Ludovic Courtès, 2015/10/08
- 05/12: system: Make service procedures non-monadic., Ludovic Courtès, 2015/10/08
- 12/12: PRELIM: services: Introduce extensible abstract services., Ludovic Courtès, 2015/10/08
- 03/12: gexp: Add 'mixed-text-file'., Ludovic Courtès, 2015/10/09
- 04/12: services: 'mingetty-service' no longer takes monadic values., Ludovic Courtès, 2015/10/09
- 11/12: system: Account skeleton API is non-monadic., Ludovic Courtès, 2015/10/09
- 07/12: services: nscd-service: Fit everything into <nscd-configuration>., Ludovic Courtès, 2015/10/09
- 06/12: services: mingetty-service: Use <mingetty-configuration> objects., Ludovic Courtès, 2015/10/09
- 09/12: system: pam: Use 'computed-file' instead of 'gexp->derivation'., Ludovic Courtès, 2015/10/09
- 10/12: guix system: Add '--derivation'.,
Ludovic Courtès <=