Subject: bugfix: update symlinks
From: [email-masked]
To: [email-masked]
Date: Sat, 14 Dec 2024 17:49:51 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

For some reason, rename-file fails when the target and destination are 
not in the same filesystem. However, we can't assume for the 
update-symlink script that all users will always have e.g. 
~/.local/share/applications (managed by guix-home) and ~ on the same 
filesystem. My use-case is trying to implement home impermanence. The 
patch is attached.

From fe07066b88556c3755db3fc29665ce93d23cc071 Mon Sep 17 00:00:00 2001
From: Nicolas Graves <[email-masked]>
Date: Sat, 14 Dec 2024 12:38:14 +0100
Subject: [PATCH] gnu: home: Replace rename in update-symlinks scripts.

* gnu/home/services/symlink-manager.scm (update-symlinks): Use
copy-file and delete-file instead of rename-file to avoid an error
when the target and backup are not in the same filesystem.
---
 gnu/home/services/symlink-manager.scm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm
index 560e03a839..d7b22d7fba 100644
--- a/gnu/home/services/symlink-manager.scm
+++ b/gnu/home/services/symlink-manager.scm
@@ -106,7 +106,8 @@ (define backup
            (mkdir-p backup-directory)
            (format #t (G_ "Backing up ~a...") (target-file file))
            (mkdir-p (dirname backup))
-           (rename-file (target-file file) backup)
+           (copy-file (target-file file) backup)
+           (delete-file (target-file file))
            (display (G_ " done\n")))
 
          (define (cleanup-symlinks home-generation)
-- 
2.46.0