[bug#76082,9/9] guix-install.sh: Check for existing installation before downloading.

Message ID 3bdb2d798b0ef6ffbba1f20e7263e47be6e9b9e3.1738815703.git.liam@hpfr.net
State New
Headers
Series Improve profile initialization on foreign distros plus misc improvements |

Commit Message

Liam Hupfer Feb. 6, 2025, 4:25 a.m. UTC
  Previously, the check came after guix_get_bin.  There’s no need to fetch
the rather large release archive if there’s an existing installation, so
check first.  Refactor the check into a function similar to other
preflight checks.

* etc/guix-install.sh: Check for existing installation before
downloading.

Change-Id: I5506fb1cacdc88bd6355e8dfa1f690acf7886c1f
---
 etc/guix-install.sh | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)
  

Patch

diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index 7a731962b3..297a726ad6 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -315,6 +315,19 @@  chk_sys_nscd()
     fi
 }
 
+chk_existing()
+{ # Avoid clobbering existing installations.
+    _debug "--- [ ${FUNCNAME[0]} ] ---"
+
+    if [[ -e /var/guix && -e /gnu ]]; then
+        if [ -n "$GUIX_ALLOW_OVERWRITE" ]; then
+            _msg_warn "Overwriting existing installation!"
+        else
+            die "A previous Guix installation was found.  Refusing to overwrite."
+        fi
+    fi
+}
+
 # Configure substitute discovery according to user's preferences.
 # $1 is the installed service file to edit.
 configure_substitute_discovery() {
@@ -393,16 +406,6 @@  sys_create_store()
     local pkg="$1"
     local tmp_path="$2"
 
-    _debug "--- [ ${FUNCNAME[0]} ] ---"
-
-    if [[ -e /var/guix && -e /gnu ]]; then
-        if [ -n "$GUIX_ALLOW_OVERWRITE" ]; then
-            _msg_warn "Overwriting existing installation!"
-        else
-            die "A previous Guix installation was found.  Refusing to overwrite."
-        fi
-    fi
-
     cd "$tmp_path"
     _msg_info "Installing /var/guix and /gnu..."
     # Strip (skip) the leading ‘.’ component, which fails on read-only ‘/’.
@@ -875,6 +878,7 @@  main_install()
     chk_gpg_keyring
     chk_sys_arch
     chk_sys_nscd
+    chk_existing
 
     _msg_info "system is ${ARCH_OS}"