From 45bedf9cdc10fafd94858f67d62b36d35dd99544 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 30 Sep 2012 01:18:45 -0700 Subject: Add chown and chgrp wrappers for prefix. For prefix, there is typically only a single unprivileged user who owns everthing that is built and installed, and in this case it's desirable to ignore chown and chrgrp failures. So, move the logic from fowners into chown and chgrp wrappers, as discussed in bug #433453. --- bin/ebuild-helpers/fowners | 5 ----- bin/ebuild-helpers/unprivileged/chgrp | 1 + bin/ebuild-helpers/unprivileged/chown | 33 +++++++++++++++++++++++++++++++++ pym/portage/package/ebuild/doebuild.py | 4 ++++ 4 files changed, 38 insertions(+), 5 deletions(-) create mode 120000 bin/ebuild-helpers/unprivileged/chgrp create mode 100755 bin/ebuild-helpers/unprivileged/chown diff --git a/bin/ebuild-helpers/fowners b/bin/ebuild-helpers/fowners index b664ec766..cee4108ce 100755 --- a/bin/ebuild-helpers/fowners +++ b/bin/ebuild-helpers/fowners @@ -14,10 +14,5 @@ slash="/" chown "${@/#${slash}/${ED}${slash}}" ret=$? -if [[ ${ret} != 0 && -n ${EPREFIX} && ${EUID} != 0 ]] ; then - ewarn "fowners failure ignored in Prefix with non-privileged user" - exit 0 -fi - [[ $ret -ne 0 ]] && __helpers_die "${0##*/} failed" exit $ret diff --git a/bin/ebuild-helpers/unprivileged/chgrp b/bin/ebuild-helpers/unprivileged/chgrp new file mode 120000 index 000000000..6fb0fcd80 --- /dev/null +++ b/bin/ebuild-helpers/unprivileged/chgrp @@ -0,0 +1 @@ +chown \ No newline at end of file diff --git a/bin/ebuild-helpers/unprivileged/chown b/bin/ebuild-helpers/unprivileged/chown new file mode 100755 index 000000000..cad34d947 --- /dev/null +++ b/bin/ebuild-helpers/unprivileged/chown @@ -0,0 +1,33 @@ +#!/bin/bash +# Copyright 2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +scriptpath=${BASH_SOURCE[0]} +scriptname=${scriptpath##*/} + +IFS=':' + +for path in ${PATH}; do + [[ -x ${path}/${scriptname} ]] || continue + [[ ${path}/${scriptname} -ef ${scriptpath} ]] && continue + IFS=$' \t\n' + output=$("${path}/${scriptname}" "$@" 2>&1) + if [[ $? -ne 0 ]] ; then + source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh + + if ! ___eapi_has_prefix_variables; then + EPREFIX= + fi + msg="${scriptname} failure ignored with unprivileged user:\n ${scriptname} $*\n ${output}" + # Reverse expansion of ${D} and ${EPREFIX}, for readability. + msg=${msg//${D}/'${D}'} + if [[ -n ${EPREFIX} ]] ; then + msg=${msg//${EPREFIX}/'${EPREFIX}'} + msg=${msg//${EPREFIX#/}/'${EPREFIX}'} + fi + ewarn "${msg}" + fi + exit 0 +done + +exit 1 diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index 04d0808ae..9deed98d7 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -158,6 +158,10 @@ def _doebuild_path(settings, eapi=None): path = [] + if eprefix and uid != 0 and "fakeroot" not in settings.features: + path.append(os.path.join(portage_bin_path, + "ebuild-helpers", "unprivileged")) + if settings.get("USERLAND", "GNU") != "GNU": path.append(os.path.join(portage_bin_path, "ebuild-helpers", "bsd")) -- cgit v1.2.3-1-g7c22