~ruther/guix-local

4e469051a77d02435eafb1df93224a2ce1bb3146 — Ludovic Courtès 11 years ago 5ac12a4
system: Add 'create-mount-point?' file system option.

* gnu/system/file-systems.scm (<file-system>)[create-mount-point?]: New
  field.
* gnu/services/base.scm (file-system-service): Add #:create-mount-point?
  parameter and honor it.
* gnu/system.scm (other-file-system-services): Update
  'file-system-service' call accordingly.
* doc/guix.texi (File Systems): Document it.
4 files changed, 17 insertions(+), 4 deletions(-)

M doc/guix.texi
M gnu/services/base.scm
M gnu/system.scm
M gnu/system/file-systems.scm
M doc/guix.texi => doc/guix.texi +3 -0
@@ 3054,6 3054,9 @@ instance, for the root file system.
This Boolean indicates whether the file system needs to be checked for
errors before being mounted.

@item @code{create-mount-point?} (default: @code{#f})
When true, the mount point is created if it does not exist yet.

@end table
@end deftp


M gnu/services/base.scm => gnu/services/base.scm +7 -2
@@ 96,11 96,13 @@ This service must be the root of the service dependency graph so that its
      (respawn? #f)))))

(define* (file-system-service device target type
                              #:key (check? #t) options (title 'any))
                              #:key (check? #t) create-mount-point?
                              options (title 'any))
  "Return a service that mounts DEVICE on TARGET as a file system TYPE with
OPTIONS.  TITLE is a symbol specifying what kind of name DEVICE is: 'label for
a partition label, 'device for a device file name, or 'any.  When CHECK? is
true, check the file system before mounting it."
true, check the file system before mounting it.  When CREATE-MOUNT-POINT? is
true, create TARGET if it does not exist yet."
  (with-monad %store-monad
    (return
     (service


@@ 109,6 111,9 @@ true, check the file system before mounting it."
      (documentation "Check, mount, and unmount the given file system.")
      (start #~(lambda args
                 (let ((device (canonicalize-device-spec #$device '#$title)))
                   #$(if create-mount-point?
                         #~(mkdir-p #$target)
                         #~#t)
                   #$(if check?
                         #~(begin
                             ;; Make sure fsck.ext2 & co. can be found.

M gnu/system.scm => gnu/system.scm +2 -1
@@ 181,10 181,11 @@ as 'needed-for-boot'."
  (sequence %store-monad
            (map (match-lambda
                  (($ <file-system> device title target type flags opts
                                    #f check?)
                                    #f check? create?)
                   (file-system-service device target type
                                        #:title title
                                        #:check? check?
                                        #:create-mount-point? create?
                                        #:options opts)))
                 file-systems)))


M gnu/system/file-systems.scm => gnu/system/file-systems.scm +5 -1
@@ 28,6 28,8 @@
            file-system-needed-for-boot?
            file-system-flags
            file-system-options
            file-system-check?
            file-system-create-mount-point?

            %fuse-control-file-system
            %binary-format-file-system


@@ 57,7 59,9 @@
  (needed-for-boot? file-system-needed-for-boot?  ; Boolean
                    (default #f))
  (check?           file-system-check?            ; Boolean
                    (default #t)))
                    (default #t))
  (create-mount-point? file-system-create-mount-point? ; Boolean
                       (default #f)))

(define %fuse-control-file-system
  ;; Control file system for Linux' file systems in user-space (FUSE).