From e7d80bcda4f526e526d441cb8f4a9064453b180b Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Thu, 27 Sep 2007 17:12:03 +0000 Subject: with help from Donnie and Ulrich, use sed to extract the statement that led to the call to die so we can print it out in our error message svn path=/main/trunk/; revision=7852 --- bin/isolated-functions.sh | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'bin/isolated-functions.sh') diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh index 5fbaae15..1ac593ee 100755 --- a/bin/isolated-functions.sh +++ b/bin/isolated-functions.sh @@ -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} ]] \ -- cgit v1.2.3-65-gdbad