aboutsummaryrefslogtreecommitdiff
path: root/stupid.sh
blob: 43bbcd995deb99499b038b34b56324bcd0989bc0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash

QUIET_INSTALL='no'
STUPID_DIR=$(pwd)

function installRoutine {
	echo "[$1]<Info> Running checks for $1 ..."

	if grep -q "$1" 'installed.stupid-log'; then
		echo "| <Warn > Package has already been installed! It will be reinstalled!"
		read -p "L <Warn > Do you want to continue? [y/N]: " confirm && ! [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] && exit

		removeRoutine $1
	elif grep -q "$name" 'installed.stupid-log'; then
		otherPkg=$(grep "$name--*" 'installed.stupid-log')
		echo "| <Warn > Another version of the package ($otherPkg) has been found! It will be removed and $1 will be installed!"
		read -p "L <Warn > Do you want to continue? [y/N]: " confirm && ! [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] && exit

		removeRoutine $otherPkg
	fi

	echo "[$1]<Info> 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 <Info> Installed!"
}

function installFail {
	echo "| <Error> Could not install! Log:"
	cat "/tmp/stupid/$name/$1.install-log"
}

function removeRoutine {
	echo "[$1]<Info> Running checks for $1 ..."

	if ! grep -q "$1" 'installed.stupid-log'; then
		echo "L <Warning> Package isn't installed!" && exit
	fi

	echo "[$1]<Info> 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 <Info> Removed!"
}

function removeFail {
	echo "[$1]<Error> 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]<Error> 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]<Error> Package file name and package name and/or version do not match!"; exit
			fi
			if [[ $(type -t stupidInstall) != "function" ]]; then
				echo "[$1]<Error> No install function found!"; exit
			fi
			if [[ $(type -t stupidRemove) != "function" ]]; then
				echo "[$1]<Error> No remove function found!"; exit
			fi

			$routine "$name--$version"
		)
		shift
	done
}

while [ ! -z $1 ]; do
	case $1 in
		-q|quiet)
			QUIET_INSTALL='yes'
			;;
		-i|install)
			handlePackages installRoutine $@
			exit
			;;
		-r|remove)
			handlePackages removeRoutine $@
			exit
			;;
		*)
			echo '[Error] Invalid command!'
			;;
	esac
	shift
done