Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcodefiles <11915375+codefiles@users.noreply.github.com>2023-10-10 04:00:22 -0400
committerGitHub <noreply@github.com>2023-10-10 10:00:22 +0200
commit5e59acf937c3bb9cfe6a3b7a0a264b9df00239ee (patch)
tree17bada8edc17539bfcfb3b1412c91692b9d6580b
parentdc69acd4b43931f9fd3a267d78834d1a38fbb10f (diff)
Add handling of signal interrupt and EOF at input prompts (#2154)
-rw-r--r--archinstall/lib/configuration.py2
-rw-r--r--archinstall/lib/interactions/disk_conf.py5
-rw-r--r--archinstall/lib/interactions/general_conf.py15
-rw-r--r--archinstall/lib/interactions/manage_users_conf.py6
-rw-r--r--archinstall/lib/interactions/utils.py7
-rw-r--r--archinstall/lib/menu/text_input.py11
6 files changed, 34 insertions, 12 deletions
diff --git a/archinstall/lib/configuration.py b/archinstall/lib/configuration.py
index aeeddbb8..95e237d7 100644
--- a/archinstall/lib/configuration.py
+++ b/archinstall/lib/configuration.py
@@ -177,5 +177,5 @@ def save_config(config: Dict):
case "all":
config_output.save(dest_path)
- except KeyboardInterrupt:
+ except (KeyboardInterrupt, EOFError):
return
diff --git a/archinstall/lib/interactions/disk_conf.py b/archinstall/lib/interactions/disk_conf.py
index 84a3196c..c18119ec 100644
--- a/archinstall/lib/interactions/disk_conf.py
+++ b/archinstall/lib/interactions/disk_conf.py
@@ -134,7 +134,10 @@ def select_disk_config(
output = "You will use whatever drive-setup is mounted at the specified directory\n"
output += "WARNING: Archinstall won't check the suitability of this setup\n"
- path = prompt_dir(str(_('Enter the root directory of the mounted devices: ')), output)
+ try:
+ path = prompt_dir(str(_('Enter the root directory of the mounted devices: ')), output)
+ except (KeyboardInterrupt, EOFError):
+ return preset
mods = disk.device_handler.detect_pre_mounted_mods(path)
return disk.DiskLayoutConfiguration(
diff --git a/archinstall/lib/interactions/general_conf.py b/archinstall/lib/interactions/general_conf.py
index a23426d0..b12a6fb8 100644
--- a/archinstall/lib/interactions/general_conf.py
+++ b/archinstall/lib/interactions/general_conf.py
@@ -28,14 +28,15 @@ def ask_ntp(preset: bool = True) -> bool:
def ask_hostname(preset: str = '') -> str:
- while True:
- hostname = TextInput(
- str(_('Desired hostname for the installation: ')),
- preset
- ).run().strip()
+ hostname = TextInput(
+ str(_('Desired hostname for the installation: ')),
+ preset
+ ).run().strip()
+
+ if not hostname:
+ return preset
- if hostname:
- return hostname
+ return hostname
def ask_for_a_timezone(preset: Optional[str] = None) -> Optional[str]:
diff --git a/archinstall/lib/interactions/manage_users_conf.py b/archinstall/lib/interactions/manage_users_conf.py
index 879578da..ca912283 100644
--- a/archinstall/lib/interactions/manage_users_conf.py
+++ b/archinstall/lib/interactions/manage_users_conf.py
@@ -75,7 +75,11 @@ class UserList(ListManager):
prompt = '\n\n' + str(_('Enter username (leave blank to skip): '))
while True:
- username = input(prompt).strip(' ')
+ try:
+ username = input(prompt).strip(' ')
+ except (KeyboardInterrupt, EOFError):
+ return None
+
if not username:
return None
if not self._check_for_correct_username(username):
diff --git a/archinstall/lib/interactions/utils.py b/archinstall/lib/interactions/utils.py
index f6b5b2d3..fdbb4625 100644
--- a/archinstall/lib/interactions/utils.py
+++ b/archinstall/lib/interactions/utils.py
@@ -17,7 +17,12 @@ def get_password(prompt: str = '') -> Optional[str]:
if not prompt:
prompt = _("Enter a password: ")
- while password := getpass.getpass(prompt):
+ while True:
+ try:
+ password = getpass.getpass(prompt)
+ except (KeyboardInterrupt, EOFError):
+ break
+
if len(password.strip()) <= 0:
break
diff --git a/archinstall/lib/menu/text_input.py b/archinstall/lib/menu/text_input.py
index 05ca0f22..971df5fd 100644
--- a/archinstall/lib/menu/text_input.py
+++ b/archinstall/lib/menu/text_input.py
@@ -1,4 +1,5 @@
import readline
+import sys
class TextInput:
@@ -12,6 +13,14 @@ class TextInput:
def run(self) -> str:
readline.set_pre_input_hook(self._hook)
- result = input(self._prompt)
+ try:
+ result = input(self._prompt)
+ except (KeyboardInterrupt, EOFError):
+ # To make sure any output that may follow
+ # will be on the line after the prompt
+ sys.stdout.write('\n')
+ sys.stdout.flush()
+
+ result = ''
readline.set_pre_input_hook()
return result