From 3bd2f3dc81469a6a7f31a7096677fc11ed06ed30 Mon Sep 17 00:00:00 2001
From: Markus Heiser <markus.heiser@darmarit.de>
Date: Tue, 27 Apr 2021 13:02:55 +0200
Subject: [PATCH] [fix] manage - fix miss usage of 'set -e'
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The philosophy of set -e is typically that it only exits upon uncaught
errors. Here, the presence of || outside the subshell seems to tell the shell
that the error inside the subshell is 'caught' and therefore set -e does not
cause an exit after false [1].

The shell does not exit if the command that fails is ... part of any command
executed in a && or || list except the command following the final && or ||, any
command in a pipeline but the last, or if the command’s return status is being
inverted with ! [2]

[1] https://unix.stackexchange.com/questions/296526/set-e-in-a-subshell
[2] https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html#The-Set-Builtin

BTW: fix error reported by 'make test.shell'

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
---
 manage | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/manage b/manage
index f42075b28..3ff1a6f88 100755
--- a/manage
+++ b/manage
@@ -343,14 +343,17 @@ pyenv.install() {
     if pyenv.install.OK > /dev/null; then
         return 0
     fi
-    pyenv
-    pyenv.OK || die 42 "error while build pyenv (${PY_ENV_BIN})"
 
     (   set -e
-       build_msg PYENV "[install] pip install -e 'searx${PY_SETUP_EXTRAS}'"
-       "${PY_ENV_BIN}/python" -m pip install -e ".${PY_SETUP_EXTRAS}"
-       buildenv
-    ) || die 42 "error while pip install (${PY_ENV_BIN})"
+        pyenv
+        build_msg PYENV "[install] pip install -e 'searx${PY_SETUP_EXTRAS}'"
+        "${PY_ENV_BIN}/python" -m pip install -e ".${PY_SETUP_EXTRAS}"
+        buildenv
+    )
+    local exit_val=$?
+    if [ ! $exit_val -eq 0 ]; then
+        die 42 "error while pip install (${PY_ENV_BIN})"
+    fi
 }
 
 pyenv.uninstall() {
@@ -462,7 +465,7 @@ themes.simple() {
 PYLINT_FILES=()
 while IFS= read -r line; do
    PYLINT_FILES+=("$line")
-done <<< $(pylint.FILES)
+done <<< "$(pylint.FILES)"
 
 # shellcheck disable=SC2119
 main() {