summaryrefslogtreecommitdiffstats
path: root/init.sh
blob: 33a2d82d2ce68e28b4c4e30a00b4eca71f0a3849 (plain)
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
110
111
112
113
114
115
116
117
118
119
#!/bin/sh
# jpokorny@redhat.com

#
# base functions
#

announce () {
	# use colours if available
	echo
	if test -t 1; then
		echo -en "\\033[32m"
		echo -n "$1"
		echo -e "\\033[0m"
	else
		echo "[[ $1 ]]"
	fi
}

check_nargs () {
	[ $1 -ge $2 ]
	ret=$?
	[ $ret -eq 0 ] || announce "action failed (expected $1+ args, got $2)"
	return $ret
}

check_ret () {
	[ $1 -ne 0 ] && announce "action failed with exit status $1"
	return $1
}

do_del () {
	#echo "delete $1?"
	[ -d "$1" ] && rm -rfI -- "$1" || echo "$1 not present"
}

do_git_submodule () {
	# usage: $1 = action, $2..n submodules
	ret=0
	for submodule in "${@:2}"; do
		announce "$1 $submodule (git submodule)"
		if [ "$1" == "get" ]; then
			git submodule update --init "$submodule" 2>&1
		else
			do_del "$submodule"
		fi
		ret=$?
		[ $ret -ne 0 ] && break
	done
	check_ret $ret
}

do_wget () {
	# usage: $1 = action, $2 = target dir, $3..n = actual arguments to wget
	check_nargs $# 3 || return $?
	if [ "$(dirname $2)" == "." ]; then
		toplevel="$2"
	else
		toplevel="$(dirname $2)"
	fi
	announce "$1 $toplevel (wget)"

	if [ "$1" == "get" ]; then
		wget --no-verbose --directory-prefix "$2" "${@:3}" 2>&1
	else
		do_del "$toplevel"
	fi
	check_ret $?
}

do_svn () {
	# usage: $1 = action, $2 = target dir, $3 = svn repo (+ possibly args)
	# TODO: support for revisions?
	check_nargs $# 3 || return $?
	if [ "$(dirname $2)" == "." ]; then
		toplevel="$2"
	else
		toplevel="$(dirname $2)"
	fi
	announce "$1 $toplevel (svn)"

	if [ "$1" == "get" ]; then
		svn checkout --force "${@:3}" "$2" 2>&1
	else
		do_del "$toplevel"
	fi
	check_ret $?
}

#
# source the choices (./init-* files) and go
#

for choice in $(ls init-*); do [ -f $choice ] && source ./$choice; done
CHOICES=$(echo $CHOICES | sed 's/^|//')

main () {
	action="get"
	if [ "$1" == "get" -o "$1" == "del" ]; then
		action="$1"
		[ $# -gt 1 ] && shift # || fall-through via unrecognized choice
	fi
	while [ -n "$1" ]; do
		eval "case \"$1\" in
			$CHOICES)
				$1 $action || exit $?
				shift
				continue;;
			all)
				main $action $(echo $CHOICES | sed 's/|/ /g')
				break;;
			help|*)
				echo \"usage: ./init.sh [del] ($CHOICES|all)+\"
				break;;
		esac"
	done
}

[ $# -eq 0 ] && main help || main "$@"