When signaling successful exit from an ebuild phase via ebuild-ipc,
authorZac Medico <zmedico@gentoo.org>
Thu, 2 Sep 2010 19:13:59 +0000 (12:13 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 2 Sep 2010 19:13:59 +0000 (12:13 -0700)
first check for non-empty $SANDBOX_LOG and signal unsuccessful exit
if necessary. This fixes an issue with phases being treated as
successful even when there were sandbox violations.

bin/ebuild.sh
bin/misc-functions.sh

index b3b23aabb8d2ab5e62fe4dfaed9e9f938111cb07..73ea8c807ebf753c338ea5936c7929161e89ddff 100755 (executable)
@@ -2266,6 +2266,25 @@ ebuild_main() {
        esac
 }
 
+if [[ -s $SANDBOX_LOG ]] ; then
+       # We use SANDBOX_LOG to check for sandbox violations,
+       # so we ensure that there can't be a stale log to
+       # interfere with our logic.
+       x=
+       if [[ -n SANDBOX_ON ]] ; then
+               x=$SANDBOX_ON
+               export SANDBOX_ON=0
+       fi
+
+       rm -f "$SANDBOX_LOG" || \
+               die "failed to remove stale sandbox log: '$SANDBOX_LOG'"
+
+       if [[ -n $x ]] ; then
+               export SANDBOX_ON=$x
+       fi
+       unset x
+fi
+
 if [[ $EBUILD_PHASE = depend ]] ; then
        ebuild_main
 elif [[ -n $EBUILD_SH_ARGS ]] ; then
@@ -2285,7 +2304,10 @@ elif [[ -n $EBUILD_SH_ARGS ]] ; then
                        chmod g+w "$T/environment" &>/dev/null
                fi
                [[ -n $PORTAGE_EBUILD_EXIT_FILE ]] && > "$PORTAGE_EBUILD_EXIT_FILE"
-               [[ -n $PORTAGE_IPC_DAEMON ]] && "$PORTAGE_BIN_PATH"/ebuild-ipc exit 0
+               if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
+                       [[ ! -s $SANDBOX_LOG ]]
+                       "$PORTAGE_BIN_PATH"/ebuild-ipc exit $?
+               fi
                exit 0
        )
        exit $?
index 32d3bfc00ad145c2e7f6784907648009efd7f458..1edacadca90afecf3f2712fd2382ebf8c22ae1a3 100755 (executable)
@@ -952,7 +952,10 @@ if [ -n "${MISC_FUNCTIONS_ARGS}" ]; then
        done
        unset x
        [[ -n $PORTAGE_EBUILD_EXIT_FILE ]] && > "$PORTAGE_EBUILD_EXIT_FILE"
-       [[ -n $PORTAGE_IPC_DAEMON ]] && "$PORTAGE_BIN_PATH"/ebuild-ipc exit 0
+       if [[ -n $PORTAGE_IPC_DAEMON ]] ; then
+               [[ ! -s $SANDBOX_LOG ]]
+               "$PORTAGE_BIN_PATH"/ebuild-ipc exit $?
+       fi
 fi
 
 :