diff options
author | Mike Frysinger <vapier@gentoo.org> | 2007-09-27 17:12:03 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2007-09-27 17:12:03 +0000 |
commit | e7d80bcda4f526e526d441cb8f4a9064453b180b (patch) | |
tree | 39ed400421b8eb68ceaa9ac8b6a5b9bfc52c1c87 | |
parent | c922a749ba04d7837f1c2910359bc3e7473b3f59 (diff) | |
download | portage-e7d80bcda4f526e526d441cb8f4a9064453b180b.tar.gz portage-e7d80bcda4f526e526d441cb8f4a9064453b180b.tar.bz2 portage-e7d80bcda4f526e526d441cb8f4a9064453b180b.zip |
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
-rwxr-xr-x | bin/isolated-functions.sh | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh index 5fbaae15c..1ac593ee2 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} ]] \ |