]> sourceware.org Git - lvm2.git/commitdiff
tests: utils.sh six stacktrace
authorMarian Csontos <mcsontos@redhat.com>
Fri, 14 Jul 2017 17:51:59 +0000 (19:51 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Fri, 14 Jul 2017 18:18:42 +0000 (20:18 +0200)
Changes:

- BASH_SOURCE index was one off.
- The first line of stacktrace was pure confusion displaying executed
  script together with innermost line number (which was either 125 when
  STACKTRACE or 229 when skip was called.)
- We can safely ignore innermost call, as stack trace is always produced
  by stacktrace function.
- It is safer to test for array length, instead of testing FUNCNAME is
  main - if main function were introduced.
- Bashishm is safe to use as this function as a whole is relying on bash.

test/lib/utils.sh

index 4d46ca918404c8a3f41d877a7a71f644084e51e8..61ccf9b6d221646b4722e54e26cfab0078519159 100644 (file)
@@ -109,11 +109,14 @@ grep1_() {
 
 stacktrace() {
        trap - ERR
-       local i=0
-
-       echo "## - $0:${BASH_LINENO[0]}"
-       while FUNC=${FUNCNAME[$i]}; test "$FUNC" != "main"; do
-               echo "## $i ${FUNC}() called from ${BASH_SOURCE[$i]}:${BASH_LINENO[$i]}"
+       # i=1 - ignoring innermost frame - it is always stacktrace function
+       local i=1 n=${#BASH_LINENO[*]}
+       # n-=1 - ignoring last frame as well - it is not interesting
+       let n-=1
+
+       echo "## - $0:${BASH_LINENO[$((n-1))]}"
+       while [[ $i -lt $n ]]; do
+               echo "## $i ${FUNCNAME[$i]}() called from ${BASH_SOURCE[$((i+1))]}:${BASH_LINENO[$i]}"
                i=$(( i + 1 ))
        done
 }
This page took 0.03337 seconds and 5 git commands to generate.