diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-10-12 15:11:50 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-10-12 15:18:41 +0200 |
commit | 8036b0942b89022147aaf9cd9940988fdbcc19ef (patch) | |
tree | 519e9c1a1247cb22b1db451ca7abc7cefd5968c6 | |
parent | dde49cfe5312b95f44060155256036532f3cb22a (diff) | |
download | guix-8036b0942b89022147aaf9cd9940988fdbcc19ef.tar guix-8036b0942b89022147aaf9cd9940988fdbcc19ef.tar.gz |
pull: Don't use rename(2) across potentially different devices.
Reported by Formbi on #guix.
* guix/scripts/pull.scm (migrate-generations): Use 'symlink' and
'delete-file' instead of 'rename-file'. The latter could lead to EXDEV
when $HOME and /var were different partitions.
-rw-r--r-- | guix/scripts/pull.scm | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index 8e0595076a..660a2b9110 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -239,7 +239,7 @@ Download and deploy the latest version of Guix.\n")) (string-append (config-directory #:ensure? #f) "/current")) (define (migrate-generations profile directory) - "Migration the generations of PROFILE to DIRECTORY." + "Migrate the generations of PROFILE to DIRECTORY." (format (current-error-port) (G_ "Migrating profile generations to '~a'...~%") %profile-directory) @@ -251,7 +251,10 @@ Download and deploy the latest version of Guix.\n")) (target (string-append directory "/current-guix-" (number->string generation) "-link"))) - (rename-file source target))) + ;; Note: Don't use 'rename-file' as SOURCE and TARGET might + ;; live on different file systems. + (symlink (readlink source) target) + (delete-file source))) (profile-generations profile)) (symlink current (string-append directory "/current-guix")))) |