file-systems: Add helpers for parsing the options string into an alist.
* gnu/system/file-systems.scm (file-system-options->alist) (alist->file-system-options): New procedures. * tests/file-systems.scm: New tests. * doc/guix.texi (File Systems): Add note about the newly added procedures.
This commit is contained in:
parent
281d80d8e5
commit
fa35fb58c8
3 changed files with 58 additions and 4 deletions
|
@ -11694,10 +11694,14 @@ update time on the in-memory version of the file inode), and
|
||||||
Manual}, for more information on these flags.
|
Manual}, for more information on these flags.
|
||||||
|
|
||||||
@item @code{options} (default: @code{#f})
|
@item @code{options} (default: @code{#f})
|
||||||
This is either @code{#f}, or a string denoting mount options passed to the
|
This is either @code{#f}, or a string denoting mount options passed to
|
||||||
file system driver. @xref{Mount-Unmount-Remount,,, libc, The GNU C Library
|
the file system driver. @xref{Mount-Unmount-Remount,,, libc, The GNU C
|
||||||
Reference Manual}, for details and run @command{man 8 mount} for options for
|
Library Reference Manual}, for details and run @command{man 8 mount} for
|
||||||
various file systems.
|
options for various file systems. Note that the
|
||||||
|
@code{file-system-options->alist} and @code{alist->file-system-options}
|
||||||
|
procedures from @code{(gnu system file-systems)} can be used to convert
|
||||||
|
file system options given as an association list to the string
|
||||||
|
representation, and vice-versa.
|
||||||
|
|
||||||
@item @code{mount?} (default: @code{#t})
|
@item @code{mount?} (default: @code{#t})
|
||||||
This value indicates whether to automatically mount the file system when
|
This value indicates whether to automatically mount the file system when
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
|
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
|
||||||
|
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -38,6 +39,9 @@
|
||||||
file-system-needed-for-boot?
|
file-system-needed-for-boot?
|
||||||
file-system-flags
|
file-system-flags
|
||||||
file-system-options
|
file-system-options
|
||||||
|
file-system-options->alist
|
||||||
|
alist->file-system-options
|
||||||
|
|
||||||
file-system-mount?
|
file-system-mount?
|
||||||
file-system-check?
|
file-system-check?
|
||||||
file-system-create-mount-point?
|
file-system-create-mount-point?
|
||||||
|
@ -251,6 +255,33 @@ UUID-TYPE, a symbol such as 'dce or 'iso9660."
|
||||||
((? string?)
|
((? string?)
|
||||||
device)))
|
device)))
|
||||||
|
|
||||||
|
(define (file-system-options->alist string)
|
||||||
|
"Translate the option string format of a <file-system> record into an
|
||||||
|
association list of options or option/value pairs."
|
||||||
|
(if string
|
||||||
|
(let ((options (string-split string #\,)))
|
||||||
|
(map (lambda (param)
|
||||||
|
(let ((=index (string-index param #\=)))
|
||||||
|
(if =index
|
||||||
|
(cons (string-take param =index)
|
||||||
|
(string-drop param (1+ =index)))
|
||||||
|
param)))
|
||||||
|
options))
|
||||||
|
'()))
|
||||||
|
|
||||||
|
(define (alist->file-system-options options)
|
||||||
|
"Return the string representation of OPTIONS, an association list. The
|
||||||
|
string obtained can be used as the option field of a <file-system> record."
|
||||||
|
(if (null? options)
|
||||||
|
#f
|
||||||
|
(string-join (map (match-lambda
|
||||||
|
((key . value)
|
||||||
|
(string-append key "=" value))
|
||||||
|
(key
|
||||||
|
key))
|
||||||
|
options)
|
||||||
|
",")))
|
||||||
|
|
||||||
(define (file-system-needed-for-boot? fs)
|
(define (file-system-needed-for-boot? fs)
|
||||||
"Return true if FS has the 'needed-for-boot?' flag set, or if it holds the
|
"Return true if FS has the 'needed-for-boot?' flag set, or if it holds the
|
||||||
store--e.g., if FS is the root file system."
|
store--e.g., if FS is the root file system."
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2015, 2017 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2015, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||||
|
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -64,4 +65,22 @@
|
||||||
(_ #f))
|
(_ #f))
|
||||||
(source-module-closure '((gnu system file-systems)))))
|
(source-module-closure '((gnu system file-systems)))))
|
||||||
|
|
||||||
|
(test-equal "file-system-options->alist"
|
||||||
|
'("autodefrag" ("subvol" . "home") ("compress" . "lzo"))
|
||||||
|
(file-system-options->alist "autodefrag,subvol=home,compress=lzo"))
|
||||||
|
|
||||||
|
(test-equal "file-system-options->alist (#f)"
|
||||||
|
'()
|
||||||
|
(file-system-options->alist #f))
|
||||||
|
|
||||||
|
(test-equal "alist->file-system-options"
|
||||||
|
"autodefrag,subvol=root,compress=lzo"
|
||||||
|
(alist->file-system-options '("autodefrag"
|
||||||
|
("subvol" . "root")
|
||||||
|
("compress" . "lzo"))))
|
||||||
|
|
||||||
|
(test-equal "alist->file-system-options (null)"
|
||||||
|
#f
|
||||||
|
(alist->file-system-options '()))
|
||||||
|
|
||||||
(test-end)
|
(test-end)
|
||||||
|
|
Reference in a new issue