guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/02: services: guix: Gracefully handle dangling symlink for ‘machines.


From: guix-commits
Subject: 01/02: services: guix: Gracefully handle dangling symlink for ‘machines.scm’.
Date: Sat, 6 Apr 2024 10:06:35 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 91e1a457b567935784632b3aa0235a7a3b5d35f9
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sat Apr 6 11:51:31 2024 +0200

    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
---
 gnu/services/base.scm | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 5104b3d104..3f912225a0 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -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"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]