diff options
author | Samuli Suominen <ssuominen@gentoo.org> | 2010-09-30 19:54:42 +0000 |
---|---|---|
committer | Samuli Suominen <ssuominen@gentoo.org> | 2010-09-30 19:54:42 +0000 |
commit | ad501e2a52d073a40e31a1a16c7b0ff4228e6de5 (patch) | |
tree | 7baa4021b00d4e0db09194732c8442d29695a9f5 /app-admin | |
parent | amd64/x86 stable, bug #335383 (diff) | |
download | gentoo-2-ad501e2a52d073a40e31a1a16c7b0ff4228e6de5.tar.gz gentoo-2-ad501e2a52d073a40e31a1a16c7b0ff4228e6de5.tar.bz2 gentoo-2-ad501e2a52d073a40e31a1a16c7b0ff4228e6de5.zip |
If no targets are found, remove the symlink and exit.
(Portage version: 2.2_rc88/cvs/Linux x86_64)
Diffstat (limited to 'app-admin')
-rw-r--r-- | app-admin/eselect-pinentry/ChangeLog | 8 | ||||
-rw-r--r-- | app-admin/eselect-pinentry/eselect-pinentry-0.2.ebuild | 21 | ||||
-rw-r--r-- | app-admin/eselect-pinentry/files/eselect-pinentry-0.2 | 147 |
3 files changed, 175 insertions, 1 deletions
diff --git a/app-admin/eselect-pinentry/ChangeLog b/app-admin/eselect-pinentry/ChangeLog index 5b4e584fc5a6..58c284767b4d 100644 --- a/app-admin/eselect-pinentry/ChangeLog +++ b/app-admin/eselect-pinentry/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for app-admin/eselect-pinentry # Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-pinentry/ChangeLog,v 1.1 2010/09/30 13:48:58 ssuominen Exp $ +# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-pinentry/ChangeLog,v 1.2 2010/09/30 19:54:41 ssuominen Exp $ + +*eselect-pinentry-0.2 (30 Sep 2010) + + 30 Sep 2010; Samuli Suominen <ssuominen@gentoo.org> + +files/eselect-pinentry-0.2, +eselect-pinentry-0.2.ebuild: + If no targets are found, remove the symlink and exit. *eselect-pinentry-0.1 (30 Sep 2010) diff --git a/app-admin/eselect-pinentry/eselect-pinentry-0.2.ebuild b/app-admin/eselect-pinentry/eselect-pinentry-0.2.ebuild new file mode 100644 index 000000000000..a87387d859b5 --- /dev/null +++ b/app-admin/eselect-pinentry/eselect-pinentry-0.2.ebuild @@ -0,0 +1,21 @@ +# Copyright 1999-2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-pinentry/eselect-pinentry-0.2.ebuild,v 1.1 2010/09/30 19:54:41 ssuominen Exp $ + +DESCRIPTION="Manage /usr/bin/pinentry symlink" +HOMEPAGE="http://www.gentoo.org/" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd ~x64-freebsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" +IUSE="" + +RDEPEND="app-admin/eselect + !<app-crypt/pinentry-0.8.0-r1" +DEPEND="${RDEPEND}" + +src_install() { + insinto /usr/share/eselect/modules + newins "${FILESDIR}"/${P} pinentry.eselect || die +} diff --git a/app-admin/eselect-pinentry/files/eselect-pinentry-0.2 b/app-admin/eselect-pinentry/files/eselect-pinentry-0.2 new file mode 100644 index 000000000000..074435554008 --- /dev/null +++ b/app-admin/eselect-pinentry/files/eselect-pinentry-0.2 @@ -0,0 +1,147 @@ +# Copyright 1999-2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id: eselect-pinentry-0.2,v 1.1 2010/09/30 19:54:42 ssuominen Exp $ + +# Based on eselect-sh by Michał Górny + +DESCRIPTION="Manage /usr/bin/pinentry symlink" +MAINTAINER="ssuominen@gentoo.org" +VERSION="0.1" + +## Functions ## + +# find a list of pinentry symlink targets, best first +find_targets() { + local t + for t in \ + pinentry-qt \ + pinentry-gtk-2 \ + pinentry-qt4 \ + pinentry-curses \ + ; do + if [[ -x ${ROOT}/usr/bin/${t} ]]; then + echo ${t} + fi + done +} + +# set the pinentry symlink +set_symlinks() { + local target="${1}" targets + + [[ ! -L ${ROOT}/usr/bin/pinentry && -e ${ROOT}/usr/bin/pinentry ]] && \ + die -q "/usr/bin/pinentry is not a symlink!" + + if is_number "${target}" && [[ ${target} -ge 1 ]]; then + targets=( $(find_targets) ) + + # If no targets are found, remove the symlink and exit + if [[ -L ${ROOT}/usr/bin/pinentry && -z ${targets} ]]; then + rm -f "${ROOT}"/usr/bin/pinentry + return + fi + + target=${targets[target-1]} + fi + + if [[ -x ${ROOT}/usr/bin/${target} ]]; then + local tmpf="${ROOT}"/usr/bin/pinentry.new + # we could use 'ln -f' to directly replace the symlink + # but 'mv' is an atomic operation so it should be more fault-proof + + ln -s "${target}" "${tmpf}" || \ + die -q "Unable to create temporary symlink" + if ! mv "${tmpf}" "${ROOT}"/usr/bin/pinentry; then + rm -f "${tmpf}" # cleanup + die -q "Unable to replace /usr/bin/pinentry symlink with ${target}" + fi + else + die -q "Target '${target}' doesn't appear to be valid!" + fi +} + +### show action ### + +describe_show() { + echo "Show the current pinentry implementation" +} + +do_show() { + [[ -z ${@} ]] || die -q "Too many parameters" + + write_list_start "Current pinentry implementation:" + if [[ -L ${ROOT}/usr/bin/pinentry ]]; then + write_kv_list_entry "$(basename $(readlink ${ROOT}/usr/bin/pinentry))" "" + elif [[ -e ${ROOT}/usr/bin/pinentry ]]; then + write_kv_list_entry "(not a symlink)" "" + else + write_kv_list_entry "(unset)" "" + fi +} + +### list action ### + +describe_list() { + echo "List available pinentry implementations" +} + +do_list() { + [[ -z ${@} ]] || die -q "Too many parameters" + + local i targets + targets=( $(find_targets) ) + if [[ -n ${targets[@]} ]]; then + for (( i = 0; i < ${#targets[@]}; i++ )) ; do + [[ ${targets[${i}]} == $(basename $(readlink ${ROOT}/usr/bin/pinentry)) ]] && \ + targets[${i}]="${targets[${i}]} $(highlight '*')" + done + write_list_start "Available pinentry implementations:" + write_numbered_list "${targets[@]}" + else + write_kv_list_entry "(none found)" "" + fi +} + +### set action ### + +describe_set() { + echo "Set a new pinentry implementation" +} + +describe_set_options() { + echo "target : Target name or number (from 'list' action)" +} + +describe_set_parameters() { + echo "<target>" +} + +do_set() { + if [[ -z ${1} ]]; then + die -q "Not enough parameters" + elif [[ -n ${2} ]]; then + die -q "Too many parameters" + else + set_symlinks "${1}" + fi +} + +### update action ### + +describe_update() { + echo "Automatically update the pinentry implementation" +} + +describe_update_options() { + echo "ifunset : Do not override existing implementation" +} + +do_update() { + [[ -z ${1} || ( -z ${2} && ( ${1} == ifunset || ${1} == '--if-unset' ) ) ]] || \ + die -q "Usage error" + + [[ ( ${1} == ifunset || ${1} == '--if-unset' ) && -L ${ROOT}/usr/bin/pinentry && -x ${ROOT}/usr/bin/pinentry ]] && \ + return + + set_symlinks 1 +} |