From 9a00bf144f6a3e67a23f40db13d3ad033a92795c Mon Sep 17 00:00:00 2001
From: Ben Kero <ben.kero@gmail.com>
Date: Mon, 16 May 2016 16:25:12 -0700
Subject: [PATCH] Revert "Revert "Properly fail/trap in eval_run_d"" and fix
 PIPESTATUS

This reverts commit f07e33a2e9169265260f430a609baefa131f614c.

This change reverts the revert while fixing the underlying issue --
$PIPESTATUS needed to be encapsulated in ${}s

Change-Id: I1df06ffa7aecf4ea4b8e187dc756e9fc779786bc
---
 lib/common-functions | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/lib/common-functions b/lib/common-functions
index 0f1b25658..97305d602 100644
--- a/lib/common-functions
+++ b/lib/common-functions
@@ -113,12 +113,15 @@ function check_element () {
 # $1 is the hook to run
 # $2 is the regex to look for
 function eval_run_d () {
-  local TEMP=`run_d $1`
-  echo "$TEMP"
-  if [ `echo "$TEMP" | grep -s "$2"` ]; then
-      TEMP=`echo "$TEMP" | grep "$2"`
-      eval "$TEMP"
-  fi
+    local run_output=$(mktemp)
+    trap "rm -f $run_output; check_break after-error ${break_cmd:-bash}" ERR
+    run_d $1 $run_output
+    if grep -q "$2" $run_output; then
+        local temp=$(grep "$2" $run_output)
+        eval "$temp"
+    fi
+    rm $run_output
+    trap - ERR
 }
 
 # Usage: map_nbd $image
@@ -194,9 +197,16 @@ function cleanup_image_dir () {
 # Run a directory of hooks outside the target (that is, no chrooting).
 function run_d() {
     check_element
-    check_break before-$1 bash
+    check_break before-$1 ${break_cmd:-bash}
     if [ -d ${TMP_HOOKS_PATH}/$1.d ] ; then
-      dib-run-parts ${TMP_HOOKS_PATH}/$1.d
+        if [ -n "$2" ]; then
+            dib-run-parts ${TMP_HOOKS_PATH}/$1.d | tee $2
+            if [[ ${PIPESTATUS[0]} != 0 ]]; then
+                return 1
+            fi
+        else
+            dib-run-parts ${TMP_HOOKS_PATH}/$1.d
+        fi
     fi
     check_break after-$1 bash
 }