From 2438e727fee8bf154ab229057923d1c974ade180 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Tue, 24 May 2022 09:35:55 +0300 Subject: Reworked structure and fully implemented install and remove functionality --- stupid.sh | 115 +++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 69 insertions(+), 46 deletions(-) (limited to 'stupid.sh') diff --git a/stupid.sh b/stupid.sh index f03e516..43bbcd9 100755 --- a/stupid.sh +++ b/stupid.sh @@ -1,66 +1,89 @@ #!/bin/bash -quietInstall='no' +QUIET_INSTALL='no' +STUPID_DIR=$(pwd) -function installPackages { - shift - while [ ! -z $1 ]; do - pkg=$(find . -type f -name "$1--*.stupid" | tail -n 1 || grep -q '--' && find . -type f -name "$1.stupid") - if [ -z $pkg ]; then - echo "[$1] No package file!"; shift; continue - fi - ( - source "$pkg" - if [[ $(type -t stupidInstall) != "function" ]]; then - echo "[$1] No install function found!"; exit - fi - if [[ $(type -t stupidRemove) != "function" ]]; then - echo "[$1] No remove function found (required even when installing)!"; exit - fi +function installRoutine { + echo "[$1] Running checks for $1 ..." - echo "[$1] Installing $title $version ..." + if grep -q "$1" 'installed.stupid-log'; then + echo "| Package has already been installed! It will be reinstalled!" + read -p "L Do you want to continue? [y/N]: " confirm && ! [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] && exit - mkdir -p "/tmp/stupid/$1"; cd "/tmp/stupid/$1" - touch "$pkg.install-log" - stupidInstall >"$pkg.install-log" 2>&1 - echo "FINISHED" >> "$pkg.install-log" + removeRoutine $1 + elif grep -q "$name" 'installed.stupid-log'; then + otherPkg=$(grep "$name--*" 'installed.stupid-log') + echo "| Another version of the package ($otherPkg) has been found! It will be removed and $1 will be installed!" + read -p "L Do you want to continue? [y/N]: " confirm && ! [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] && exit - echo "[$1] Installed!" - ) - if (( $? != 0 )); then - echo "[$1] Could not install! Log:" - cat "/tmp/stupid/$1/$pkg.install-log" - fi - shift - done + removeRoutine $otherPkg + fi + + echo "[$1] Installing $1 ..." + + mkdir -p "/tmp/stupid/$name" && cd "/tmp/stupid/$name"; touch "$1.install-log" + stupidInstall >"$1.install-log" 2>&1 || (installFail $1 && exit) + + echo "FINISHED" >> "$1.install-log"; echo "$1" >> "$STUPID_DIR/installed.stupid-log" + echo "L Installed!" } -function removePackages { - shift +function installFail { + echo "| Could not install! Log:" + cat "/tmp/stupid/$name/$1.install-log" +} + +function removeRoutine { + echo "[$1] Running checks for $1 ..." + + if ! grep -q "$1" 'installed.stupid-log'; then + echo "L Package isn't installed!" && exit + fi + + echo "[$1] Removing $1 ..." + + mkdir -p "/tmp/stupid/$name" && cd "/tmp/stupid/$name"; touch "$1.remove-log" + stupidRemove >"$1.remove-log" 2>&1 || (removeFail $1 && exit) + + grep -qv "$1" "$STUPID_DIR/installed.stupid-log" > "$STUPID_DIR/installed.stupid-log" + echo "L Removed!" +} + +function removeFail { + echo "[$1] Could not remove! Log:" + cat "/tmp/stupid/$name/$1.remove-log" +} + + +function handlePackages { + routine=$1 + shift; shift + while [ ! -z $1 ]; do + echo '' + + # Package names can either be "PACKAGENAME" or "PACKAGENAME--VERSION" + # If it's "PACKAGENAME" we only want the last occurence, since alphanumerically this should be the latest version pkg=$(find . -type f -name "$1--*.stupid" | tail -n 1 || grep -q '--' && find . -type f -name "$1.stupid") if [ -z $pkg ]; then echo "[$1] No package file!"; shift; continue fi + + # Ran in subshell so the source-ing doesn't persist between routine functions of multiple packages ( source "$pkg" + if [[ "$1--$version" != "$name--$version" ]] && [[ "$1" != "$name--$version" ]]; then + echo "[$1] Package file name and package name and/or version do not match!"; exit + fi + if [[ $(type -t stupidInstall) != "function" ]]; then + echo "[$1] No install function found!"; exit + fi if [[ $(type -t stupidRemove) != "function" ]]; then echo "[$1] No remove function found!"; exit fi - echo "[$1] Removing $title $version ..." - - mkdir -p "/tmp/stupid/$1"; cd "/tmp/stupid/$1" - touch "$pkg.remove-log" - stupidRemove >"$pkg.remove-log" 2>&1 - echo "FINISHED" >> "$pkg.remove-log" - - echo "[$1] Installed!" + $routine "$name--$version" ) - if (( $? != 0 )); then - echo "[$1] Could not remove! Log:" - cat "/tmp/stupid/$1/$pkg.remove-log" - fi shift done } @@ -68,14 +91,14 @@ function removePackages { while [ ! -z $1 ]; do case $1 in -q|quiet) - quietInstall='yes' + QUIET_INSTALL='yes' ;; -i|install) - installPackages $@ + handlePackages installRoutine $@ exit ;; -r|remove) - removePackages $@ + handlePackages removeRoutine $@ exit ;; *) -- cgit v1.2.3