~ruther/guix-local

91e1a457b567935784632b3aa0235a7a3b5d35f9 — Ludovic Courtès 1 year, 11 months ago 0b941ea
services: guix: Gracefully handle dangling symlink for ‘machines.scm’.

Previously, if /etc/guix/machines.scm was a dangling symlink, it would
be kept (because ‘file-exists?’ would return #f) and thus the following
‘symlink’ call would throw with EEXIST.

* gnu/services/base.scm (guix-machines-files-installation): Use ‘lstat’
rather than ‘file-exists?’.

Change-Id: I07c7eed842dacabbd19ae2a17ac3e59cf26e46b2
1 files changed, 8 insertions(+), 7 deletions(-)

M gnu/services/base.scm
M gnu/services/base.scm => gnu/services/base.scm +8 -7
@@ 1790,13 1790,14 @@ archive' public keys, with GUIX."
        ;; If MACHINES-FILE already exists, move it out of the way.
        ;; Create a backup if it's a regular file: it's likely that the
        ;; user manually updated it.
        (if (file-exists? machines-file)
            (if (and (symbolic-link? machines-file)
                     (store-file-name? (readlink machines-file)))
                (delete-file machines-file)
                (rename-file machines-file
                             (string-append machines-file ".bak")))
            (mkdir-p (dirname machines-file)))
        (let ((stat (false-if-exception (lstat machines-file))))
          (if stat
              (if (and (eq? 'symlink (stat:type stat))
                       (store-file-name? (readlink machines-file)))
                  (delete-file machines-file)
                  (rename-file machines-file
                               (string-append machines-file ".bak")))
              (mkdir-p (dirname machines-file))))

        ;; Installed the declared machines file.
        (symlink #+(scheme-file "machines.scm"