From: Zac Medico Date: Fri, 29 Jan 2010 18:43:41 +0000 (-0000) Subject: Bug #299248 - Fix doins return code handling to make sure it always fails X-Git-Tag: v2.1.7.17~46 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=3eb61d3f813520b760d108bb9cc43b47fc4805d9;p=portage.git Bug #299248 - Fix doins return code handling to make sure it always fails when appropriate. Thanks to Jonathan Callen for the initial patch. (trunk r15158) svn path=/main/branches/2.1.7/; revision=15226 --- 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