From b49457645e1265383c4eff2b663d93005646bfb9 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 4 Jan 2010 17:00:27 +0000 Subject: [PATCH] Bug #299248 - Fix doins return code handling to make sure it always fails when appropriate. Thanks to Jonathan Callen for the initial patch. svn path=/main/trunk/; revision=15158 --- bin/ebuild-helpers/doins | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/bin/ebuild-helpers/doins b/bin/ebuild-helpers/doins index 7e1a9ca95..cf4644770 100755 --- a/bin/ebuild-helpers/doins +++ b/bin/ebuild-helpers/doins @@ -63,12 +63,20 @@ _doins() { } _xdoins() { + local -i success=0 failed=0 while read -d $'\0' x ; do _doins "$x" "${x%/*}" + if [[ $? -eq 0 ]] ; then + ((success|=1)) + else + ((failed|=1)) + fi done + [[ $failed -ne 0 || $success -eq 0 ]] && return 1 || return 0 } success=0 +failed=0 for x in "$@" ; do if [[ $PRESERVE_SYMLINKS = n && -d $x ]] || \ @@ -100,15 +108,24 @@ for x in "$@" ; do fi find "$x_orig" -type d -exec dodir "${INSDESTTREE}/{}" \; find "$x_orig" \( -type f -or -type l \) -print0 | _xdoins + if [[ ${PIPESTATUS[1]} -eq 0 ]] ; then + ((success|=1)) + else + ((failed|=1)) + fi if [[ $x != $x_orig ]] ; then popd >/dev/null mv "$TMP/1/$x_orig" "$x" fi while popd >/dev/null 2>&1 ; do true ; done - ((success|=1)) else - _doins "${x}" && ((success|=1)) + _doins "${x}" + if [[ $? -eq 0 ]] ; then + ((success|=1)) + else + ((failed|=1)) + fi fi done rm -rf "$TMP" -[ $success -gt 0 ] && exit 0 || exit 1 +[[ $failed -ne 0 || $success -eq 0 ]] && exit 1 || exit 0 -- 2.26.2