with help from Donnie and Ulrich, use sed to extract the statement that led to the...
authorMike Frysinger <vapier@gentoo.org>
Thu, 27 Sep 2007 17:12:03 +0000 (17:12 -0000)
committerMike Frysinger <vapier@gentoo.org>
Thu, 27 Sep 2007 17:12:03 +0000 (17:12 -0000)
svn path=/main/trunk/; revision=7852

bin/isolated-functions.sh

index 5fbaae15cf236e685f96d5668148a90d7d5a0371..1ac593ee264d33cee7d3deb8ea8e5a31d8a8d53b 100755 (executable)
@@ -55,8 +55,30 @@ diefunc() {
        eerror "ERROR: $CATEGORY/$PF failed."
        dump_trace 2 ${filespacing} ${linespacing}
        eerror "  $(printf "%${filespacing}s" "${BASH_SOURCE[1]##*/}"), line $(printf "%${linespacing}s" "${BASH_LINENO[0]}"):  Called die"
-       eerror
-       eerror " ${*:-(no error message)}"
+       eerror "The specific snippet of code:"
+       # This scans the file that called die and prints out the logic that
+       # ended in the call to die.  This really only handles lines that end
+       # with '|| die' and any preceding lines with line continuations (\).
+       # This tends to be the most common usage though, so let's do it.
+       # Due to the usage of appending to the hold space (even when empty),
+       # we always end up with the first line being a blank (thus the 2nd sed).
+       sed -n \
+               -e "# When we get to the line that failed, append it to the
+                   # hold space, move the hold space to the pattern space,
+                   # then print out the pattern space and quit immediately
+                   ${BASH_LINENO[0]}{H;g;p;q}" \
+               -e '# If this line ends with a line continuation, append it
+                   # to the hold space
+                   /\\$/H' \
+               -e '# If this line does not end with a line continuation,
+                   # erase the line and set the hold buffer to it (thus
+                   # erasing the hold buffer in the process)
+                   /[^\]$/{s:^.*$::;h}' \
+               ${BASH_SOURCE[1]} \
+               | sed -e '1d' -e 's:^:RETAIN-LEADING-SPACE:' \
+               | while read -r n ; do eerror "  ${n#RETAIN-LEADING-SPACE}" ; done
+       eerror " The die message:"
+       eerror "  ${*:-(no error message)}"
        eerror
        eerror "If you need support, post the topmost build error, and the call stack if relevant."
        [[ -n ${PORTAGE_LOG_FILE} ]] \