~ruther/guix-local

37dd1e6a34698e5bccaf99b6681c503b1a4e5efc — Ludovic Courtès 10 years ago 240b57f
services: 'file-union' makes sure each source file exists.

Before that, specifying an invalid timezone in 'operating-system' would
lead to a dangling symlink in the 'etc' directory, which in turn would
lead to a kernel panic at boot time.

Reported by pizzaiolo on #guix.

* gnu/services.scm (file-union): Add 'stat' call for SOURCE.
1 files changed, 6 insertions(+), 1 deletions(-)

M gnu/services.scm
M gnu/services.scm => gnu/services.scm +6 -1
@@ 291,7 291,12 @@ file."
                     (chdir #$output)
                     #$@(map (match-lambda
                               ((target source)
                                #~(symlink #$source #$target)))
                                #~(begin
                                    ;; Stat the source to abort early if it
                                    ;; does not exist.
                                    (stat #$source)

                                    (symlink #$source #$target))))
                             files))))

(define (directory-union name things)