From 13f8f060c53735f84d275f8e51993478c633ac41 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rg=20Sachse?= <Joerg.Sachse@slub-dresden.de>
Date: Tue, 27 Jul 2021 12:09:10 +0200
Subject: [PATCH] add error handling, color coded messages and shellchecked
 style

---
 build_all.sh | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)
 mode change 100644 => 100755 build_all.sh

diff --git a/build_all.sh b/build_all.sh
old mode 100644
new mode 100755
index b4be6da..238b758
--- a/build_all.sh
+++ b/build_all.sh
@@ -19,19 +19,30 @@
 
 set -o nounset                              # Treat unset variables as an error
 
-BUILD=./build
-if [ -e ${BUILD} ];
-then
-  echo BUILD-dir ${BUILD} already exist, Aborting...
-else
-  TEMP_FILE=$(mktemp)
-  COMBINED_FILE=${BUILD}/SLUB_mediaconch_policy_all.xml
-  mkdir $BUILD
+RED="\\e[31m"
+WHITE="\\e[0m"
+ERROR="${RED}[ERROR]\t${WHITE}"
+INFO="[INFO]\t"
+
+BUILD="./build"
+REQUIREMENTS="mktemp xsltproc"              # list external required binaries here (space separated)
+
+for REQUIREMENT in ${REQUIREMENTS}; do
+  command -v "${REQUIREMENT}" >/dev/null 2>&1 || { echo >&2 "${ERROR}${REQUIREMENT} required but not installed. Aborting."; exit 1; }
+done
+
+if [ -d ${BUILD} ]; then
+  echo "${INFO}BUILD-dir '${BUILD}' already exists. It will be removed and recreated for a fresh build."
+  rm -rf "${BUILD}" || { echo >&2 "${ERROR}Could not remove pre-existing build directory at '${BUILD}'. Aborting."; exit 1; }
+fi
+
+  TEMP_FILE="$(mktemp)"
+  COMBINED_FILE="${BUILD}/SLUB_mediaconch_policy_all.xml"
+  mkdir -p "${BUILD}" || { echo >&2 "${ERROR}Could not create build directory at '${BUILD}'. Aborting."; exit 1; }
   echo '<?xml version="1.0" encoding="UTF-8"?>' > "${TEMP_FILE}"
   echo '<policy />' >> "${TEMP_FILE}"
-  xsltproc SLUB_mediaconch_policy_all.xsl "${TEMP_FILE}" > "${COMBINED_FILE}" 
+  xsltproc "SLUB_mediaconch_policy_all.xsl" "${TEMP_FILE}" > "${COMBINED_FILE}"
   rm -f "${TEMP_FILE}"
   ls -lh "${COMBINED_FILE}"
-  echo "finished."
-fi
+  echo "${INFO}finished."
 
-- 
GitLab