aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-10-11 11:49:37 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2022-10-11 12:00:44 -0400
commite46bb5fd5af3adb931e0930326c60a7c2e4cbe4e (patch)
treed5785e3dcf7ed1f5ed15726cd2c5ec5c59ee7671
parent68d79a8b60a1a564a8425de8220fb65dc79ba9ee (diff)
downloadguix-e46bb5fd5af3adb931e0930326c60a7c2e4cbe4e.tar
guix-e46bb5fd5af3adb931e0930326c60a7c2e4cbe4e.tar.gz
guix-install.sh: Restore compatibility with "yes" invocation.
Commit 6a2e303d3a had modified prompt_yes_no to only read a single character, aiming to ease the user experience. This was, in retrospect, a bad idea, as it makes user input error more likely and introduces complexity. This commit reverts to line-oriented input, while preserving the default yes value so that a user can simply hit 'Enter' at the prompt in place of typing "yes". * etc/guix-install.sh (_flush): Delete function. (prompt_yes_no): Restore line-oriented read. Remove loop. Make anything else than yes means no. Use Bash features to streamline definition. Reported-by: Lars-Dominik Braun <lars@6xq.net> and others.
-rwxr-xr-xetc/guix-install.sh25
1 files changed, 6 insertions, 19 deletions
diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index f71d6f0de7..3604c71ed6 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -92,33 +92,20 @@ _debug()
fi
}
-_flush()
-{
- while read -t0; do
- read -N1
- done
-}
-
die()
{
_err "${ERR}$*"
exit 1
}
-# Return true if user answered yes, false otherwise. It defaults to "yes"
-# when a single newline character is input.
+# Return true if user answered yes, false otherwise. The prompt is
+# yes-biased, that is, when the user simply enter newline, it is equivalent to
+# answering "yes".
# $1: The prompt question.
prompt_yes_no() {
- while true; do
- _flush
- read -N1 -rsp "$1 [Y/n]" yn
- case $yn in
- $'\n') echo && return 0;;
- [Yy]*) echo && return 0;;
- [Nn]*) echo && return 1;;
- *) echo && _msg "Please answer yes or no."
- esac
- done
+ local -l yn
+ read -rp "$1 [Y/n]" yn
+ [[ ! $yn || $yn = y || $yn = yes ]] || return 1
}
chk_require()