summaryrefslogtreecommitdiff
blob: 853143e19d599b5e7ff205cca6a89369d2095da2 (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
120
121
122
123
124
125
126
127
128
129
130
131
# -*-eselect-*-  vim: ft=eselect
# Copyright 2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2 or later
# $Id: $

DESCRIPTION="Manage the /usr/bin/gradle symlink"
MAINTAINER=""
VERSION=0.1

# find a list of gradle symlink targets
find_targets() {
	local f
	for f in "${EROOT}"/usr/bin/gradle?(-bin)-[[:digit:]]*; do
		[[ -x ${f} ]] && basename "${f}"
	done
}

remove_symlink() {
	rm "${EROOT}/usr/bin/gradle" \
		|| die -q "Could not remove symlink"
}

set_symlink() {
	local target=$1

	if is_number "${target}"; then
		local targets=( $(find_targets) )
		target=${targets[target-1]}
	fi

	[[ -z ${target} ]] \
		&& die -q "Target \"${1}\" doesn't apper to be valid!"

	[[ ! -x ${EROOT}/usr/bin/${target} ]] \
		&& die -q "${EROOT}/usr/bin/${target} is not an executable"

	ln -s "${target}" "${EROOT}/usr/bin/gradle" \
		|| die -q "Could not set symlink"
}

describe_show() {
	echo "Shows the current gradle symlink"
}

do_show() {
	write_list_start "Current gradle symlink:"
	if [[ -L ${EROOT}/usr/bin/gradle ]]; then
		local gradle=$(cannonicalise "${EROOT}/usr/bin/gradle")
		write_kv_list_entry "${gradle}" ""
	else
		write_kv_list_entry "(unset)" ""
	fi
}

describe_list() {
	echo "list available gradle symlink targets"
}

do_list() {
	local i targets=( $(find_targets) )

	write_list_start "Available gradle symlink targets:"
	for (( i = 0; i < ${#targets[@]}; i++ )); do
		# highligh the target where the symlink is pointing to
		[[ ${targets[i]} = \
			$(basename "$(canonicalise "${EROOT}/usr/bin/gradle")") ]] \
			&& targets[i]=$(highlight_marker "${targets[i]}")
	done
	write_numbered_list -m "(none found)" "${targets[@]}"
}

describe_set() {
	echo "Set a new gradle symlink target"
}

describe_set_parameters() {
	echo "<target>"
}

describe_set_options() {
	echo "target : Target name or number (from 'list' action)"
}

do_set() {
	[[ -z $1 ]] && die -q "You didn't tell me what to set the symlink to"
	[[ $# -gt 1 ]] && die -q "Too many parameters"
	test_for_root

	if [[ -L ${EROOT}/usr/bin/gradle ]]; then
		# existing symmlink
		remove_symlink
		set_symlink "$1"
	elif [[ -e ${EROOT}/usr/bin/gradle ]]; then
		# we have someting strange
		die -q "${EROOT}/usr/bin/gradle exists but is not a symlink"
	else
		set_symlink "$1"
	fi
}

describe_update() {
	echo "Automatically update the gradle symlink"
}

describe_update_options() {
	echo "ifunset: Do not override currently set version"
}

do_update() {
	[[ -z $1 || $1 == ifunset ]] || die -q "Usage error"
	[[ $# -gt 1 ]] && die -q "Too many parameters"
	test_for_root

	if [[ -L ${EROOT}/usr/bin/gradle ]]; then
		if [[ $1 == ifunset && -e ${EROOT}/usr/bin/gradle ]]; then
			return
		fi
		remove_symlink
	elif [[ -e ${EROOT}/usr/bin/gradle ]]; then
		die -q "${EROOT}/usr/bin/gradle exists but is not a symlink"
	fi

	local targets=( $(find_targets) )
	if [[ ${#targets[@]} -gt 0 ]]; then
		set_symlink "${targets[${#targets[@]}-1]}"
	fi
}

test_for_root() {
	[[ -w ${EROOT}/usr/bin ]] || die -q "${EROOT}/usr/bin not writeable by current user. Are you root?"
}