summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2007-09-27 17:12:03 +0000
committerMike Frysinger <vapier@gentoo.org>2007-09-27 17:12:03 +0000
commite7d80bcda4f526e526d441cb8f4a9064453b180b (patch)
tree39ed400421b8eb68ceaa9ac8b6a5b9bfc52c1c87
parentc922a749ba04d7837f1c2910359bc3e7473b3f59 (diff)
downloadportage-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-xbin/isolated-functions.sh26
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} ]] \