diff options
author | Danny van Dyk <kugelfang@gentoo.org> | 2005-06-07 06:57:38 +0000 |
---|---|---|
committer | Danny van Dyk <kugelfang@gentoo.org> | 2005-06-07 06:57:38 +0000 |
commit | 139a4ca25eb5d9513fbd4edc6034c4af06b0457d (patch) | |
tree | 92f8bdd75bbd577b1732fee8a88d3386daa9b153 /modules/kernel.eselect | |
parent | Added (start|stop|restart) functionality to rc.eclectic. (diff) | |
download | eselect-139a4ca25eb5d9513fbd4edc6034c4af06b0457d.tar.gz eselect-139a4ca25eb5d9513fbd4edc6034c4af06b0457d.tar.bz2 eselect-139a4ca25eb5d9513fbd4edc6034c4af06b0457d.zip |
Moved to Gentoo infrastructure and renamed project to 'eselect'.
svn path=/trunk/; revision=117
Diffstat (limited to 'modules/kernel.eselect')
-rw-r--r-- | modules/kernel.eselect | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/modules/kernel.eselect b/modules/kernel.eselect new file mode 100644 index 0000000..ada4c9d --- /dev/null +++ b/modules/kernel.eselect @@ -0,0 +1,104 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +DESCRIPTION="Manage the /usr/src/linux symlink" +MAINTAINER="ciaranm@gentoo.org" +SVN_DATE='$Date$' +VERSION=$(svn_date_to_version "${SVN_DATE}" ) + +# find a list of kernel symlink targets +find_targets() { + for f in ${ROOT}/usr/src/linux-* ; do + [[ -d ${f} ]] && echo $(basename ${f} ) + done +} + +# try to remove the kernel symlink +remove_symlink() { + rm "${ROOT}/usr/src/linux" +} + +# set the kernel symlink +set_symlink() { + target=${1} + 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 "${ROOT}/usr/src/${target}" ]] ; then + pushd "${ROOT}/usr/src" 1>/dev/null + ln -s "${target}" "linux" + popd 1>/dev/null + else + die -q "Target \"${1}\" doesn't appear to be valid!" + fi +} + +### show action ### + +describe_show() { + echo "Show the current kernel symlink" +} + +do_show() { + write_list_start "Current kernel symlink:" + if [[ -L "${ROOT}/usr/src/linux" ]] ; then + write_kv_list_entry "$(readlink ${ROOT}/usr/src/linux )" "" + else + write_kv_list_entry "(unset)" "" + fi +} + +### list action ### + +describe_list() { + echo "List available kernel symlink targets" +} + +do_list() { + targets=( $(find_targets ) ) + write_list_start "Available kernel symlink targets:" + if [[ -n ${targets[@]} ]] ; then + local i + for (( i = 0 ; i < ${#targets[@]} ; i = i + 1 )) ; do + [[ ${targets[${i}]} == $(readlink ${ROOT}/usr/src/linux ) ]] && \ + targets[${i}]="${targets[${i}]} $(highlight '*' )" + done + write_numbered_list "${targets[@]}" + else + write_kv_list_entry "(none found)" "" + fi +} + +### set action ### + +describe_set() { + echo "Set a new kernel symlink target" +} + +do_set() { + if [[ -z ${1} ]] ; then + # no parameter + die -q "You didn't tell me what to set the symlink to" + + elif [[ -L "${ROOT}/usr/src/linux" ]] ; then + # existing symlink + if ! remove_symlink ; then + die -q "Couldn't remove existing symlink" + elif ! set_symlink "${1}" ; then + die -q "Couldn't set a new symlink" + fi + + elif [[ -e "${ROOT}/usr/src/linux" ]] ; then + # we have something strange + die -q "Sorry, ${ROOT}/usr/src/linux confuses me" + + else + set_symlink "${1}" || die -q "Couldn't set a new symlink" + fi +} + +# vim: set ft=eselect : |