ct-ng.comp
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Dec 13 23:32:39 2011 +0100 (2011-12-13)
branch1.13
changeset 2847 c0bf2319af08
parent 1876 a6a4beab3125
child 2988 a57b8a45ea26
permissions -rw-r--r--
scripts: fix dumping execution backtrace

Dumping the backtrace has been broken since changeset #652e56d6d35a:
scripts: execute each steps in a subshell

We can spawn sub-sub-shells in some cases.

The way the fault handler works is to dump the backtrace, but to avoid
printing it once for every sub-shell (which could get quite confusing),
it simply exits when it detects that it is being run in a sub-shell,
leaving to the top-level shell the work to dump the backtrace.

Because each step is executed in its own sub-shell, the variable arrays
that contain the step name, the source file and line number, are lost
when exiting the per-step sub-shell.

Hence, the backtrace is currently limited to printing only the top-level
main procedure of the shell.

Fix this thus:
- when dumping the bckatraces for the steps & the functions, remember
it was dumped, and only dump it if it was not already dumped
- at the top-level shell, print the hints

Also, rename the top-level step label.

Reported-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
(transplanted from 4193d6e6a17430a177fa88c287879c2c35e319f3)
yann@835
     1
# To be sourced
yann@835
     2
yann@835
     3
_ct-ng () {
yann@835
     4
    local cur prev samples show_samples actions steps start_steps stop_steps ct_ng_opts vars
yann@835
     5
    COMPREPLY=()
yann@835
     6
    cur=$(_get_cword)
yann@835
     7
    prev=${COMP_WORDS[COMP_CWORD-1]}
yann@835
     8
yann@2053
     9
    samples=$( "${COMP_WORDS[0]}" list-samples-short 2>/dev/null )
yann@835
    10
    show_samples=$(echo "${samples}" |sed -r -e 's/(^| )/\1show-/g;')
yann@1025
    11
    build_samples=$(echo "${samples}" |sed -r -e 's/(^| )/\1build-/g;')
yann@835
    12
yann@918
    13
    steps=$(${COMP_WORDS[0]} list-steps 2>/dev/null |awk '$1 == "-" { print $2; }')
yann@934
    14
    start_steps=$(echo "${steps}" |sed -r -e 's/($| )/\1+/;')
yann@835
    15
    stop_steps=$(echo "${steps}" |sed -r -e 's/(^| )/+\1/;')
yann@835
    16
yann@1803
    17
    actions='help menuconfig oldconfig saveconfig extractconfig
yann@1025
    18
             build build. build-all build-all.
yann@2053
    19
             wiki-samples list-samples list-samples-short list-steps
yann@2053
    20
             show-tuple show-all show-config
yann@2053
    21
             clean distclean updatetools
yann@932
    22
             tarball version'
yann@835
    23
yann@1876
    24
    vars="RESTART= STOP= PREFIX= V="
yann@835
    25
yann@1025
    26
    ct_ng_opts="${samples} ${show_samples} ${build_samples}
yann@835
    27
                ${steps} ${start_steps} ${stop_steps}
yann@835
    28
                ${actions} ${vars}"
yann@835
    29
yann@835
    30
    COMPREPLY=($(compgen -W "${ct_ng_opts}" -- "${cur}"))
yann@835
    31
    return 0
yann@835
    32
}
yann@835
    33
complete -F _ct-ng ct-ng