From eb5075aab5f7e5dedf9ab1687bba1f0605a913dd Mon Sep 17 00:00:00 2001 From: Muhammad Rivan Date: Thu, 3 Jun 2021 07:29:26 +0700 Subject: [PATCH] Revamp debugging --- install.sh | 3 -- lib-core.sh | 153 +++++++++++++++++++++++++++------------------------- 2 files changed, 81 insertions(+), 75 deletions(-) diff --git a/install.sh b/install.sh index b9423b5..d54bddc 100755 --- a/install.sh +++ b/install.sh @@ -152,8 +152,5 @@ else fi echo; prompt -w "${final_msg}"; echo - rootify ls /mama; ls /mama; ls /mama - ls /mama - ls /mama [[ -x /usr/bin/notify-send ]] && notify-send "'${name}' theme has been installed. Enjoy!" "${notif_msg}" -i "dialog-information-symbolic" fi diff --git a/lib-core.sh b/lib-core.sh index eb17c4d..1e1d80a 100755 --- a/lib-core.sh +++ b/lib-core.sh @@ -147,7 +147,7 @@ anim=( ) ############################################################################### -# UTILITIES # +# CORE UTILITIES # ############################################################################### start_animation() { @@ -189,6 +189,84 @@ prompt() { esac } +############################################################################### +# SELF SAFETY # +############################################################################### +##### This is the core of error handling, make sure there's no error here ##### + +if [[ -d "${WHITESUR_TMP_DIR}" ]]; then + start_animation; sleep 2; stop_animation; echo + + if [[ -d "${WHITESUR_TMP_DIR}" ]]; then + prompt -e "ERROR: Whitesur installer or tweaks is already running. Probably it's run by '$(ls -ld "${WHITESUR_TMP_DIR}" | awk '{print $3}')'" + exit 1 + fi +fi + +rm -rf "${WHITESUR_TMP_DIR}" +mkdir -p "${WHITESUR_TMP_DIR}"; exec 2> "${WHITESUR_TMP_DIR}/error_log.txt" + +signal_exit() { + rm -rf "${WHITESUR_TMP_DIR}" + stop_animation +} + +operation_aborted() { + IFS=$'\n' + local sources=($(basename -a "${WHITESUR_SOURCE[@]}" "${BASH_SOURCE[@]}" | sort -u)) + local dist_ids=($(awk -F '=' '/ID/{print $2}' "/etc/os-release")) + local repo_ver="" + local lines=() + + if ! repo_ver="$(cd "${REPO_DIR}"; git log -1 --date=format-local:"%FT%T%z" --format="%ad")"; then + if ! repo_ver="$(date -r "${REPO_DIR}" +"%FT%T%z")"; then + repo_ver="unknown" + fi + fi + + clear + + prompt -e "\n\n Oops! Operation has been aborted or failed...\n" + prompt -e "=========== ERROR LOG ===========" + + if ! awk '{printf "\033[1;31m >>> %s\n", $0}' "${WHITESUR_TMP_DIR}/error_log.txt"; then + prompt -e ">>>>>>> No error log found <<<<<<" + fi + + prompt -e "\n =========== ERROR INFO ==========" + prompt -e "FOUND :" + + for i in "${sources[@]}"; do + lines=($(grep -Fn "${error_snippet:-${BASH_COMMAND}}" "${REPO_DIR}/${i}" | cut -d : -f 1 || echo "")) + prompt -e " >>> ${i}$(IFS=';'; [[ "${lines[*]}" ]] && echo " at ${lines[*]}")" + done + + prompt -e "SNIPPET:\n >>> ${error_snippet:-${BASH_COMMAND}}" + prompt -e "TRACE :" + + for i in "${FUNCNAME[@]}"; do + prompt -e " >>> ${i}" + done + + prompt -e "\n =========== SYSTEM INFO =========" + prompt -e "DISTRO : $(IFS=';'; echo "${dist_ids[*]}")" + prompt -e "SUDO : $([[ -w "/" ]] && echo "yes" || echo "no")" + prompt -e "GNOME : ${GNOME_VERSION}" + prompt -e "REPO : ${repo_ver}\n" + + prompt -i "TIP: you can google or report to us the infos above\n" + prompt -i "https://github.com/vinceliuice/WhiteSur-gtk-theme/issues\n\n" + + rm -rf "${WHITESUR_TMP_DIR}"; exit 1 +} + +trap 'operation_aborted' ERR +trap 'signal_exit' INT EXIT TERM + +############################################################################### +# USER UTILITIES # +############################################################################### + helpify_title() { printf "${c_cyan}%s${c_blue}%s ${c_green}%s\n\n" "Usage: " "$0" "[OPTIONS...]" printf "${c_cyan}%s\n" "OPTIONS:" @@ -513,60 +591,6 @@ userify() { trap signal_exit SIGINT } -signal_exit() { - rm -rf "${WHITESUR_TMP_DIR}" - stop_animation -} - -operation_aborted() { - IFS=$'\n' - local sources=($(basename -a "${WHITESUR_SOURCE[@]}" "${BASH_SOURCE[@]}" | sort -u)) - local dist_ids=($(awk -F '=' '/ID/{print $2}' "/etc/os-release")) - local repo_ver="" - local lines=() - - if ! repo_ver="$(cd "${REPO_DIR}"; git log -1 --date=format-local:"%FT%T%z" --format="%ad")"; then - if ! repo_ver="$(date -r "${REPO_DIR}" +"%FT%T%z")"; then - repo_ver="unknown" - fi - fi - - clear - - prompt -e "\n\n Oops! Operation has been aborted or failed...\n" - prompt -e "=========== ERROR LOG ===========" - - if [[ -f "${WHITESUR_TMP_DIR}/error_log.txt" ]]; then - awk '{printf "\033[1;31m >>> %s\n", $0}' "${WHITESUR_TMP_DIR}/error_log.txt" - fi - - prompt -e "\n =========== ERROR INFO ==========" - prompt -e "FOUND :" - - for i in "${sources[@]}"; do - lines=($(grep -Fn "${error_snippet:-${BASH_COMMAND}}" "${REPO_DIR}/${i}" | cut -d : -f 1 || echo "")) - prompt -e " >>> ${i} $(IFS=';'; [[ "${lines[*]}" ]] && echo "at ${lines[*]}")" - done - - prompt -e "SNIPPET:\n >>> ${error_snippet:-${BASH_COMMAND}}" - prompt -e "TRACE :" - - for i in "${FUNCNAME[@]}"; do - prompt -e " >>> ${i}" - done - - prompt -e "\n =========== SYSTEM INFO =========" - prompt -e "DISTRO : $(IFS=';'; echo "${dist_ids[*]}")" - prompt -e "SUDO : $([[ -w "/" ]] && echo "yes" || echo "no")" - prompt -e "GNOME : ${GNOME_VERSION}" - prompt -e "REPO : ${repo_ver}\n" - - prompt -i "TIP: you can google or report to us the infos above\n" - prompt -i "https://github.com/vinceliuice/WhiteSur-gtk-theme/issues\n\n" - - rm -rf "${WHITESUR_TMP_DIR}"; exit 1 -} - usage() { prompt -e "Usage function is not implemented"; exit 1 } @@ -577,22 +601,7 @@ finalize_argument_parsing() { [[ "${has_any_error}" == "true" ]] && exit 1 || exit 0 elif [[ "${has_any_error}" == "true" ]]; then echo; prompt -i "Try '$0 --help' for more information."; exit 1 - else - [[ "${need_dialog[@]}" =~ "true" ]] && echo - - if [[ -d "${WHITESUR_TMP_DIR}" ]]; then - start_animation; sleep 2; stop_animation; echo - - if [[ -d "${WHITESUR_TMP_DIR}" ]]; then - prompt -e "ERROR: Whitesur installer or tweaks is already running. Probably it's run by '$(ls -ld "${WHITESUR_TMP_DIR}" | awk '{print $3}')'" - exit 1 - fi - fi - - rm -rf "${WHITESUR_TMP_DIR}"; mkdir -p "${WHITESUR_TMP_DIR}" - rm -rf "${THEME_SRC_DIR}/sass/_theme-options-temp.scss" - exec 2> "${WHITESUR_TMP_DIR}/error_log.txt" - trap 'operation_aborted' ERR - trap 'signal_exit' INT EXIT TERM + elif [[ "${need_dialog[@]}" =~ "true" ]]; then + echo fi }