guix-commits
[Top][All Lists]
Advanced

[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: Mon, 05 Oct 2015 22:11:59 +0000

civodul pushed a commit to branch wip-service-refactor
in repository guix.

commit c10b0dbbccb330a3ead863d5aa0ba347f9467104
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 0871347..353968b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -6913,6 +6913,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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]