diff options
author | Michał Górny <mgorny@gentoo.org> | 2021-03-11 14:19:44 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2021-03-11 15:08:32 +0100 |
commit | 138797c63271bb63f9769964a42a9a4307c8bb17 (patch) | |
tree | 547617d9df595d4986fbd92ea3cfd58df912a04c /eclass | |
parent | profiles: mask dev-python/ruamel-yaml[test] on arches lacking required depend... (diff) | |
download | gentoo-138797c63271bb63f9769964a42a9a4307c8bb17.tar.gz gentoo-138797c63271bb63f9769964a42a9a4307c8bb17.tar.bz2 gentoo-138797c63271bb63f9769964a42a9a4307c8bb17.zip |
kernel-install.eclass: Refactor /usr/src/linux check to function
Refactor the check whether /usr/src/linux should be updated to
a separate function, to improve readability.
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/kernel-install.eclass | 69 |
1 files changed, 43 insertions, 26 deletions
diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass index e3357cda0fd6..107a526c328f 100644 --- a/eclass/kernel-install.eclass +++ b/eclass/kernel-install.eclass @@ -76,6 +76,45 @@ BDEPEND=" x86? ( app-emulation/qemu[qemu_softmmu_targets_i386] ) )" +# @FUNCTION: kernel-install_can_update_symlink +# @USAGE: +# @DESCRIPTION: +# Determine whether the symlink at <target> (full path) should be +# updated. Returns 0 if it should, 1 to leave as-is. +kernel-install_can_update_symlink() { + debug-print-function ${FUNCNAME} "${@}" + + [[ ${#} -eq 1 ]] || die "${FUNCNAME}: invalid arguments" + local target=${1} + + # if the symlink does not exist or is broken, update + [[ ! -e ${target} ]] && return 0 + + local symlink_target=$(readlink "${target}") + # the symlink target should start with the same basename as target + # (e.g. "linux-*") + [[ ${symlink_target} != ${target##*/}-* ]] && return 1 + + # try to establish the kernel version from symlink target + local symlink_ver=${symlink_target#${target##*/}-} + # strip KV_LOCALVERSION, we want to update the old kernels not using + # KV_LOCALVERSION suffix and the new kernels using it + symlink_ver=${symlink_ver%${KV_LOCALVERSION}} + + # if ${symlink_ver} contains anything but numbers (e.g. an extra + # suffix), it's not our kernel, so leave it alone + [[ -n ${symlink_ver//[0-9.]/} ]] && return 1 + + local symlink_pkg=${CATEGORY}/${PN}-${symlink_ver} + # if the current target is either being replaced, or still + # installed (probably depclean candidate), update the symlink + has "${symlink_ver}" ${REPLACING_VERSIONS} && return 0 + has_version -r "~${symlink_pkg}" && return 0 + + # otherwise it could be another kernel package, so leave it alone + return 1 +} + # @FUNCTION: kernel-install_update_symlink # @USAGE: <target> <version> # @DESCRIPTION: @@ -89,35 +128,13 @@ kernel-install_update_symlink() { local target=${1} local version=${2} - if [[ ! -e ${target} ]]; then - ebegin "Creating ${target} symlink" + if kernel-install_can_update_symlink "${target}"; then + ebegin "Updating ${target} symlink" ln -f -n -s "${target##*/}-${version}" "${target}" eend ${?} else - local symlink_target=$(readlink "${target}") - local symlink_ver=${symlink_target#${target##*/}-} - local updated= - symlink_ver=${symlink_ver%${KV_LOCALVERSION}} - if [[ ${symlink_target} == ${target##*/}-* && \ - -z ${symlink_ver//[0-9.]/} ]] - then - local symlink_pkg=${CATEGORY}/${PN}-${symlink_ver} - # if the current target is either being replaced, or still - # installed (probably depclean candidate), update the symlink - if has "${symlink_ver}" ${REPLACING_VERSIONS} || - has_version -r "~${symlink_pkg}" - then - ebegin "Updating ${target} symlink" - ln -f -n -s "${target##*/}-${version}" "${target}" - eend ${?} - updated=1 - fi - fi - - if [[ ! ${updated} ]]; then - elog "${target} points at another kernel, leaving it as-is." - elog "Please use 'eselect kernel' to update it when desired." - fi + elog "${target} points at another kernel, leaving it as-is." + elog "Please use 'eselect kernel' to update it when desired." fi } |