mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Revert "[1.0 release prep] Remove tilde expansion discipline"
This revertsc0334e32, thereby restoring936a1939. After the fixes in0a343244anda2bc49be, the tilde expansion disciplines work nicely, so they can come back to the 1.0 branch.
This commit is contained in:
parent
a2bc49bed1
commit
350e52877b
9 changed files with 134 additions and 1 deletions
|
|
@ -751,6 +751,24 @@ r ^:test-2: echo Success\r\n$
|
|||
r ^Success\r\n$
|
||||
!
|
||||
|
||||
# err_exit #
|
||||
((SHOPT_VSH || SHOPT_ESH)) && tst $LINENO <<"!"
|
||||
L value of $? after tilde expansion in tab completion
|
||||
|
||||
# Make sure that a .sh.tilde.set discipline function
|
||||
# cannot influence the exit status.
|
||||
|
||||
w .sh.tilde.set() { true; }
|
||||
w HOME=/tmp
|
||||
w false ~\t
|
||||
u false /tmp
|
||||
w echo "Exit status is: $?"
|
||||
u Exit status is: 1
|
||||
w (exit 42)
|
||||
w echo $? ~\t
|
||||
u 42 /tmp
|
||||
!
|
||||
|
||||
# err_exit #
|
||||
((SHOPT_MULTIBYTE && (SHOPT_VSH || SHOPT_ESH))) &&
|
||||
[[ ${LC_ALL:-${LC_CTYPE:-${LANG:-}}} =~ [Uu][Tt][Ff]-?8 ]] &&
|
||||
|
|
|
|||
|
|
@ -107,6 +107,8 @@ got=~
|
|||
HOME=$saveHOME
|
||||
|
||||
# ======
|
||||
# Tilde expansion discipline function tests
|
||||
|
||||
# This nonfunctional mess was removed in ksh 93u+m ...
|
||||
if builtin .sh.tilde 2>/dev/null
|
||||
then got=$(.sh.tilde & wait "$!" 2>&1)
|
||||
|
|
@ -114,5 +116,57 @@ then got=$(.sh.tilde & wait "$!" 2>&1)
|
|||
"(got status $e$( ((e>128)) && print -n / && kill -l "$e"), $(printf %q "$got"))"
|
||||
fi
|
||||
|
||||
# ... and replaced by a proper use of discipline functions that allows customising tilde expansion.
|
||||
((.sh.version >= 20210316)) &&
|
||||
for disc in get set
|
||||
do (
|
||||
ulimit -t unlimited 2>/dev/null # fork subshell to cope with a possible crash
|
||||
|
||||
eval ".sh.tilde.$disc()
|
||||
{
|
||||
case \${.sh.${ [[ $disc == get ]] && print tilde || print value; }} in
|
||||
'~tmp') .sh.value=\$tmp ;;
|
||||
'~INC') .sh.value=\$((++i)) ;;
|
||||
'~spc') .sh.value=$'one\ttwo three\n\tfour' ;;
|
||||
'~') .sh.value=~/addition ;; # this should not recurse
|
||||
esac
|
||||
}"
|
||||
|
||||
got=~/foo
|
||||
exp=$HOME/addition/foo
|
||||
[[ $got == "$exp" ]] || err_exit "$disc discipline: bare tilde expansion:" \
|
||||
"expected $(printf %q "$exp"), got $(printf %q "$got")"
|
||||
|
||||
.sh.tilde=oldvalue
|
||||
got=$(print ~tmp/foo.$$; print "${.sh.tilde}")
|
||||
exp=$tmp/foo.$$$'\n'$tmp
|
||||
[[ $got == "$exp" ]] || err_exit "$disc discipline: result left in \${.sh.tilde}:" \
|
||||
"expected $(printf %q "$tmp"), got $(printf %q "${.sh.tilde}")"
|
||||
[[ ${.sh.tilde} == oldvalue ]] || err_exit "$disc discipline: \${.sh.tilde} subshell leak"
|
||||
|
||||
i=0
|
||||
set -- ~INC ~INC ~INC ~INC ~INC
|
||||
got=$#,$1,$2,$3,$4,$5
|
||||
exp=5,1,2,3,4,5
|
||||
[[ $got == "$exp" ]] || err_exit "$disc discipline: counter:" \
|
||||
"expected $(printf %q "$exp"), got $(printf %q "$got")"
|
||||
((i==5)) || err_exit "$disc discipline: counter: $i != 5"
|
||||
|
||||
set -- ~spc ~spc ~spc
|
||||
got=$#,$1,$2,$3
|
||||
exp=$'3,one\ttwo three\n\tfour,one\ttwo three\n\tfour,one\ttwo three\n\tfour'
|
||||
[[ $got == "$exp" ]] || err_exit "$disc discipline: quoting of whitespace:" \
|
||||
"expected $(printf %q "$exp"), got $(printf %q "$got")"
|
||||
|
||||
print "$Errors" >$tmp/Errors
|
||||
) &
|
||||
wait "$!" 2>crashmsg
|
||||
if ((!(e = $?)))
|
||||
then read Errors <$tmp/Errors
|
||||
else err_exit ".sh.tilde.$disc discipline function crashes the shell" \
|
||||
"(got status $e$( ((e>128)) && print -n / && kill -l "$e"), $(printf %q "$(<crashmsg)"))"
|
||||
fi
|
||||
done
|
||||
|
||||
# ======
|
||||
exit $((Errors<125?Errors:125))
|
||||
|
|
|
|||
|
|
@ -1029,6 +1029,7 @@ set -- \
|
|||
".sh.math" \
|
||||
".sh.pool" \
|
||||
".sh.pid" \
|
||||
".sh.tilde" \
|
||||
"SHLVL" \
|
||||
"CSWIDTH"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue