aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Matthijs <axxo@gentoo.org>2005-10-29 12:17:11 +0000
committerThomas Matthijs <axxo@gentoo.org>2005-10-29 12:17:11 +0000
commitafbd5606b632f4900ab78b9f3a29ec185d540a01 (patch)
tree95969b38eb50ce47c3bf1212dea81bdd08f3814e
parentAdded missing inherit config. (diff)
downloadeselect-afbd5606b632f4900ab78b9f3a29ec185d540a01.tar.gz
eselect-afbd5606b632f4900ab78b9f3a29ec185d540a01.tar.bz2
eselect-afbd5606b632f4900ab78b9f3a29ec185d540a01.zip
Simple java system/user vm selector
svn path=/trunk/; revision=238
-rw-r--r--modules/java.eselect139
1 files changed, 139 insertions, 0 deletions
diff --git a/modules/java.eselect b/modules/java.eselect
new file mode 100644
index 0000000..09f1275
--- /dev/null
+++ b/modules/java.eselect
@@ -0,0 +1,139 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id: $
+
+# Based on kernel.eselect
+
+DESCRIPTION="Manage the java system and user vm"
+MAINTAINER="axxo@gentoo.org"
+SVN_DATE='$Date: $'
+VERSION=$(svn_date_to_version "${SVN_DATE}" )
+
+VM_BASE=/usr/lib/jvm/
+VM_SYSTEM=/etc/java-config/system-vm
+VM_USER=${HOME}/.gentoo/user-vm
+
+find_targets() {
+ local f
+ for f in ${VM_BASE}/* ; do
+ [[ -L ${f} ]] && echo $(basename ${f})
+ done
+}
+
+sym_to_vm() {
+ basename $(readlink "${1}")
+}
+
+### show action ###
+
+describe_show() {
+ echo "Show the current vm"
+}
+
+do_show() {
+ if [[ ${1} == "system" ]]; then
+ my_show ${VM_SYSTEM} 'system-vm'
+ elif [[ ${1} == "user" ]]; then
+ my_show ${VM_USER} 'user-vm'
+ else
+ my_show ${VM_SYSTEM} 'system-vm'
+ my_show ${VM_USER} 'user-vm'
+ fi
+}
+
+my_show() {
+ local symlink=${1} vm_type=${2}
+ write_list_start "Current ${vm_type}"
+ if [[ -L "${symlink}" ]] ; then
+ write_kv_list_entry "$(sym_to_vm ${symlink})" ""
+ else
+ write_kv_list_entry "(unset)" ""
+ fi
+}
+
+### list action ###
+
+describe_list() {
+ echo "List available vms"
+}
+
+do_list() {
+ targets=( $(find_targets) )
+ write_list_start "Available java vms:"
+ if [[ -n ${targets[@]} ]] ; then
+ local i system_name user_name
+
+ [[ -L ${VM_SYSTEM} ]] && system_name=$(sym_to_vm ${VM_SYSTEM})
+ [[ -L ${VM_USER} ]] && user_name=$(sym_to_vm ${VM_USER})
+
+ for (( i = 0 ; i < ${#targets[@]} ; i = i + 1 )) ; do
+ if [[ ${targets[${i}]} == ${system_name} ]]; then
+ targets[${i}]="${targets[${i}]} $(highlight 'system-vm')"
+ fi
+ if [[ ${targets[${i}]} == ${user_user} ]]; then
+ targets[${i}]="${targets[${i}]} $(highlight 'user-vm' )"
+ fi
+ done
+ write_numbered_list "${targets[@]}"
+ else
+ write_kv_list_entry "(none found)" ""
+ fi
+}
+
+### set action ###
+
+describe_set() {
+ echo "Set a new system vm"
+}
+
+do_set() {
+ if [[ ${#} != 2 ]]; then
+ die -q "Usage [user|system] [vm]"
+
+ elif [[ ${1} == "system" ]]; then
+ if [[ ${EUID} == 0 ]]; then
+ my_set ${VM_SYSTEM} ${2}
+ else
+ die -q "Sorry only root can set system"
+ fi
+ elif [[ ${1} == "user" ]]; then
+ my_set ${VM_USER} ${2}
+ fi
+}
+
+my_set() {
+ local target=${2} symlink=${1}
+ if [[ -z ${target} ]] ; then
+ die -q "You didn't tell me what to set the symlink to"
+
+ elif [[ -L "${symlink}" ]] ; then
+ set_symlink "${target}" "${symlink}" || die -q "Couldn't set a new symlink"
+
+ elif [[ -e "${symlink}" ]] ; then
+ die -q "Sorry, ${symlink}"
+
+ else
+ set_symlink "${target}" "${symlink}"|| die -q "Couldn't set a new symlink"
+ fi
+}
+
+set_symlink() {
+ local target=${1} symlink=${2}
+ if is_number "${target}" ; then
+ targets=( $(find_targets) )
+ target=${targets[$(( ${target} - 1 ))]}
+ fi
+ if [[ -z ${target} ]] ; then
+ die -q "Target \"${1}\" doesn't appear to be valid!"
+ elif [[ -d "${VM_BASE}/${target}" ]] ; then
+ local sym_dir=$(dirname ${symlink})
+ if [[ ! -d ${sym_dir} ]]; then
+ mkdir -p ${sym_dir} || die -q "Could not create ${my_dir}"
+ fi
+ ln -snf "${VM_BASE}/${target}" "${symlink}"
+ else
+ die -q "Target \"${1}\" doesn't appear to be valid!"
+ fi
+}
+
+# vim: set ft=eselect :