Subject: Invalid 'location' field generated in dovecot configuration

From: Fredrik Salomonsson <[email-masked]>
Date: Sat, 26 Nov 2022 23:17:11 +0000

Hello,

I think I encountered the same bug when I updated my home rofi service
to use a configuration. It also has a `location` entry but it takes an
integer.

Here is a repro to reproduce it using `guix repl`:

    scheme@(guix-user)> (use-modules (gnu services configuration))
    scheme@(guix-user)> (define (serialize-integer f v) (number->string v))
    scheme@(guix-user)> (define-configuration repro-configuration (location (integer 2) "set location"))
    ;;; <stdin>:3:0: warning: shadows previous definition of `%repro-configuration-location-procedure' at <stdin>:3:0
    ;;; <unknown-location>: warning: shadows previous definition of `repro-configuration-location' at <unknown-location>
    scheme@(guix-user)> (serialize-configuration (repro-configuration) repro-configuration-fields)
    ice-9/boot-9.scm:1685:16: In procedure raise-exception:
    In procedure number->string: Wrong type argument in position 1: #f
    
    Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
    scheme@(guix-user) [1]> ,q
    scheme@(guix-user)> (repro-configuration)
    $1 = #<<repro-configuration> location: 2 %location: #f>

Note the warning about location being shadowed. And it looks like
%location is trying to use `serialize-integer` but failing as it is #f.

Here is what `guix describe` reports on what guix version I'm running:

    Generation 13	nov 26 2022 15:05:06	(current)
      guix 68925b5
        repository URL: https://git.savannah.gnu.org/git/guix.git
        branch: master
        commit: 68925b5ee7e0d96b0c84ae98a633eea5097bf511

I hope this helps with debugging this.

-- 
s/Fred[re]+i[ck]+/Fredrik/g