From 4a3b8f4d5981de444b3590fca8dfa1facb768933 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Fri, 18 Feb 2022 15:42:07 -0500 Subject: [PATCH] system: Add a version field to the record. This version field exposes the (already present) version information of a boot parameters file. * gnu/system.scm (%boot-parameters-version): New variable. ()[version]: New field. (read-boot-parameters): Use it. (operating-system-boot-parameters-file): Likewise. * tests/boot-parameters.scm (test-read-boot-parameters): Use %boot-parameters-version as the default version value in the template. --- gnu/system.scm | 21 +++++++++++++++++---- tests/boot-parameters.scm | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gnu/system.scm b/gnu/system.scm index cc925de16f..19e6262e96 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -9,7 +9,7 @@ ;;; Copyright © 2020 Danny Milosavljevic ;;; Copyright © 2020, 2021 Brice Waegeneire ;;; Copyright © 2020 Florian Pelz -;;; Copyright © 2020 Maxim Cournoyer +;;; Copyright © 2020, 2022 Maxim Cournoyer ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; Copyright © 2020 Efraim Flashner ;;; Copyright © 2021 Maxime Devos @@ -161,6 +161,8 @@ (define-module (gnu system) boot-parameters-kernel-arguments boot-parameters-initrd boot-parameters-multiboot-modules + boot-parameters-version + %boot-parameters-version read-boot-parameters read-boot-parameters-file boot-parameters->menu-entry @@ -295,6 +297,9 @@ (define (operating-system-kernel-arguments os root-device) ;;; Boot parameters ;;; +;;; When bumping the boot-parameters version, increment it by one (1). +(define %boot-parameters-version 0) + (define-record-type* boot-parameters make-boot-parameters boot-parameters? (label boot-parameters-label) @@ -322,7 +327,9 @@ (define-record-type* (kernel boot-parameters-kernel) (kernel-arguments boot-parameters-kernel-arguments) (initrd boot-parameters-initrd) - (multiboot-modules boot-parameters-multiboot-modules)) + (multiboot-modules boot-parameters-multiboot-modules) + (version boot-parameters-version ;positive integer + (default %boot-parameters-version))) (define (ensure-not-/dev device) "If DEVICE starts with a slash, return #f. This is meant to filter out @@ -359,12 +366,18 @@ (define uuid-sexp->uuid (warning (G_ "unrecognized uuid ~a at '~a'~%") x (port-filename port)) #f))) + ;; New versions are not backward-compatible, so only accept past and current + ;; versions, not future ones. + (define (version? n) + (member n (iota (1+ %boot-parameters-version)))) + (match (read port) - (('boot-parameters ('version 0) + (('boot-parameters ('version (? version? version)) ('label label) ('root-device root) ('kernel kernel) rest ...) (boot-parameters + (version version) (label label) (root-device (device-sexp->device root)) @@ -1500,7 +1513,7 @@ (define* (operating-system-boot-parameters-file os system-kernel-arguments?))) (scheme-file "parameters" #~(boot-parameters - (version 0) + (version #$(boot-parameters-version params)) (label #$(boot-parameters-label params)) (root-device #$(device->sexp diff --git a/tests/boot-parameters.scm b/tests/boot-parameters.scm index b2799d0596..d4b680df2e 100644 --- a/tests/boot-parameters.scm +++ b/tests/boot-parameters.scm @@ -101,7 +101,7 @@ (define (quote-uuid uuid) ;; Call read-boot-parameters with the desired string as input. (define* (test-read-boot-parameters #:key - (version 0) + (version %boot-parameters-version) (bootloader-name 'grub) (bootloader-menu-entries '()) (label %default-label)