~ruther/guix-local

9976c76aab2fe75d7fc672034090e19bdab6879c — Ludovic Courtès 8 years ago 1c65cca
file-systems: Preserve UUID types when serializing.

Reported by Roel Janssen <roel@gnu.org>
at <https://lists.gnu.org/archive/html/help-guix/2017-09/msg00094.html>.

* gnu/system/file-systems.scm (file-system->spec): When DEVICE is a
UUID, serialize it in a way that preserves its type.
(spec->file-system): Adjust accordingly.
* gnu/build/file-systems.scm (canonicalize-device-spec): Add case for
when SPEC is 'uuid?'.
2 files changed, 14 insertions(+), 7 deletions(-)

M gnu/build/file-systems.scm
M gnu/system/file-systems.scm
M gnu/build/file-systems.scm => gnu/build/file-systems.scm +6 -5
@@ 450,8 450,7 @@ the following:
     \"/dev/sda1\";
  • 'label', in which case SPEC is known to designate a partition label--e.g.,
     \"my-root-part\";
  • 'uuid', in which case SPEC must be a UUID (a 16-byte bytevector)
     designating a partition;
  • 'uuid', in which case SPEC must be a UUID designating a partition;
  • 'any', in which case SPEC can be anything.
"
  (define max-trials


@@ 497,9 496,11 @@ the following:
     (resolve find-partition-by-label spec identity))
    ((uuid)
     (resolve find-partition-by-uuid
              (if (string? spec)
                  (string->uuid spec)
                  spec)
              (cond ((string? spec)
                     (string->uuid spec))
                    ((uuid? spec)
                     (uuid-bytevector spec))
                    (else spec))
              uuid->string))
    (else
     (error "unknown device title" title))))

M gnu/system/file-systems.scm => gnu/system/file-systems.scm +8 -2
@@ 18,6 18,7 @@

(define-module (gnu system file-systems)
  #:use-module (ice-9 match)
  #:use-module (rnrs bytevectors)
  #:use-module (srfi srfi-1)
  #:use-module (guix records)
  #:use-module (gnu system uuid)


@@ 161,7 162,7 @@ initrd code."
  (match fs
    (($ <file-system> device title mount-point type flags options _ _ check?)
     (list (if (uuid? device)
               (uuid-bytevector device)
               `(uuid ,(uuid-type device) ,(uuid-bytevector device))
               device)
           title mount-point type flags options check?))))



@@ 170,7 171,12 @@ initrd code."
  (match sexp
    ((device title mount-point type flags options check?)
     (file-system
       (device device) (title title)
       (device (match device
                 (('uuid (? symbol? type) (? bytevector? bv))
                  (bytevector->uuid bv type))
                 (_
                  device)))
       (title title)
       (mount-point mount-point) (type type)
       (flags flags) (options options)
       (check? check?)))))