Mercurial > vim
view src/testdir/script_util.vim @ 33374:62a34e280593 v9.0.1946
patch 9.0.1946: filename expansion using ** in bash may fail
Commit: https://github.com/vim/vim/commit/9eb1ce531527a7177d16373b0f8689bbcd3d5f73
Author: Christian Brabandt <cb@256bit.org>
Date: Wed Sep 27 19:08:25 2023 +0200
patch 9.0.1946: filename expansion using ** in bash may fail
Problem: filename expansion using ** in bash may fail
Solution: Try to enable the globstar setting
Starting with bash 4.0 it supports extended globbing using the globstar
shell option. This makes matching recursively below a certain directory
using the ** pattern work as expected nowadays. However, we need to
explicitly enable this using the 'shopt -s globstar' bash command.
So let's check the bash environment variable $BASH_VERSINFO (which is
supported since bash 3.0 and conditionally enable the globstar option,
if the major version is at least 4. For older bashs, this at least
shouldn't cause errors (unless one is using really ancient bash 2.X or
something).
closes: #13002
closes: #13144
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 27 Sep 2023 19:15:06 +0200 |
parents | f936d46cc9c1 |
children |
line wrap: on
line source
" Functions shared by the tests for Vim Script " Commands to track the execution path of a script com! XpathINIT let g:Xpath = '' com! -nargs=1 -bar Xpath let g:Xpath ..= <args> com! XloopINIT let g:Xloop = 1 com! -nargs=1 -bar Xloop let g:Xpath ..= <args> .. g:Xloop com! XloopNEXT let g:Xloop += 1 " MakeScript() - Make a script file from a function. {{{2 " " Create a script that consists of the body of the function a:funcname. " Replace any ":return" by a ":finish", any argument variable by a global " variable, and every ":call" by a ":source" for the next following argument " in the variable argument list. This function is useful if similar tests are " to be made for a ":return" from a function call or a ":finish" in a script " file. func MakeScript(funcname, ...) let script = tempname() execute "redir! >" . script execute "function" a:funcname redir END execute "edit" script " Delete the "function" and the "endfunction" lines. Do not include the " word "function" in the pattern since it might be translated if LANG is " set. When MakeScript() is being debugged, this deletes also the debugging " output of its line 3 and 4. exec '1,/.*' . a:funcname . '(.*)/d' /^\d*\s*endfunction\>/,$d %s/^\d*//e %s/return/finish/e %s/\<a:\(\h\w*\)/g:\1/ge normal gg0 let cnt = 0 while search('\<call\s*\%(\u\|s:\)\w*\s*(.*)', 'W') > 0 let cnt = cnt + 1 s/\<call\s*\%(\u\|s:\)\w*\s*(.*)/\='source ' . a:{cnt}/ endwhile g/^\s*$/d write bwipeout return script endfunc " ExecAsScript - Source a temporary script made from a function. {{{2 " " Make a temporary script file from the function a:funcname, ":source" it, and " delete it afterwards. However, if an exception is thrown the file may remain, " the caller should call DeleteTheScript() afterwards. let s:script_name = '' func ExecAsScript(funcname) " Make a script from the function passed as argument. let s:script_name = MakeScript(a:funcname) " Source and delete the script. exec "source" s:script_name call delete(s:script_name) let s:script_name = '' endfunc func DeleteTheScript() if s:script_name call delete(s:script_name) let s:script_name = '' endif endfunc com! -nargs=1 -bar ExecAsScript call ExecAsScript(<f-args>)