mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.1.2278: using "cd" with "exe" may fail
Problem: Using "cd" with "exe" may fail. Solution: Use chdir() instead.
This commit is contained in:
@@ -21,6 +21,6 @@ func Test_set_filename()
|
|||||||
bwipe!
|
bwipe!
|
||||||
au! DirChanged
|
au! DirChanged
|
||||||
set noacd
|
set noacd
|
||||||
exe 'cd ' . cwd
|
call chdir(cwd)
|
||||||
call delete('samples/Xtest')
|
call delete('samples/Xtest')
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -1731,7 +1731,7 @@ function s:Before_test_dirchanged()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
function s:After_test_dirchanged()
|
function s:After_test_dirchanged()
|
||||||
exe 'cd' s:dir_this
|
call chdir(s:dir_this)
|
||||||
call delete(s:dir_foo, 'd')
|
call delete(s:dir_foo, 'd')
|
||||||
call delete(s:dir_bar, 'd')
|
call delete(s:dir_bar, 'd')
|
||||||
augroup test_dirchanged
|
augroup test_dirchanged
|
||||||
@@ -1743,11 +1743,11 @@ function Test_dirchanged_global()
|
|||||||
call s:Before_test_dirchanged()
|
call s:Before_test_dirchanged()
|
||||||
autocmd test_dirchanged DirChanged global call add(s:li, "cd:")
|
autocmd test_dirchanged DirChanged global call add(s:li, "cd:")
|
||||||
autocmd test_dirchanged DirChanged global call add(s:li, expand("<afile>"))
|
autocmd test_dirchanged DirChanged global call add(s:li, expand("<afile>"))
|
||||||
exe 'cd' s:dir_foo
|
call chdir(s:dir_foo)
|
||||||
call assert_equal(["cd:", s:dir_foo], s:li)
|
call assert_equal(["cd:", s:dir_foo], s:li)
|
||||||
exe 'cd' s:dir_foo
|
call chdir(s:dir_foo)
|
||||||
call assert_equal(["cd:", s:dir_foo], s:li)
|
call assert_equal(["cd:", s:dir_foo], s:li)
|
||||||
exe 'lcd' s:dir_bar
|
exe 'lcd ' .. fnameescape(s:dir_bar)
|
||||||
call assert_equal(["cd:", s:dir_foo], s:li)
|
call assert_equal(["cd:", s:dir_foo], s:li)
|
||||||
call s:After_test_dirchanged()
|
call s:After_test_dirchanged()
|
||||||
endfunc
|
endfunc
|
||||||
@@ -1756,11 +1756,11 @@ function Test_dirchanged_local()
|
|||||||
call s:Before_test_dirchanged()
|
call s:Before_test_dirchanged()
|
||||||
autocmd test_dirchanged DirChanged window call add(s:li, "lcd:")
|
autocmd test_dirchanged DirChanged window call add(s:li, "lcd:")
|
||||||
autocmd test_dirchanged DirChanged window call add(s:li, expand("<afile>"))
|
autocmd test_dirchanged DirChanged window call add(s:li, expand("<afile>"))
|
||||||
exe 'cd' s:dir_foo
|
call chdir(s:dir_foo)
|
||||||
call assert_equal([], s:li)
|
call assert_equal([], s:li)
|
||||||
exe 'lcd' s:dir_bar
|
exe 'lcd ' .. fnameescape(s:dir_bar)
|
||||||
call assert_equal(["lcd:", s:dir_bar], s:li)
|
call assert_equal(["lcd:", s:dir_bar], s:li)
|
||||||
exe 'lcd' s:dir_bar
|
exe 'lcd ' .. fnameescape(s:dir_bar)
|
||||||
call assert_equal(["lcd:", s:dir_bar], s:li)
|
call assert_equal(["lcd:", s:dir_bar], s:li)
|
||||||
call s:After_test_dirchanged()
|
call s:After_test_dirchanged()
|
||||||
endfunc
|
endfunc
|
||||||
@@ -1774,7 +1774,7 @@ function Test_dirchanged_auto()
|
|||||||
autocmd test_dirchanged DirChanged auto call add(s:li, "auto:")
|
autocmd test_dirchanged DirChanged auto call add(s:li, "auto:")
|
||||||
autocmd test_dirchanged DirChanged auto call add(s:li, expand("<afile>"))
|
autocmd test_dirchanged DirChanged auto call add(s:li, expand("<afile>"))
|
||||||
set acd
|
set acd
|
||||||
exe 'cd ..'
|
cd ..
|
||||||
call assert_equal([], s:li)
|
call assert_equal([], s:li)
|
||||||
exe 'edit ' . s:dir_foo . '/Xfile'
|
exe 'edit ' . s:dir_foo . '/Xfile'
|
||||||
call assert_equal(s:dir_foo, getcwd())
|
call assert_equal(s:dir_foo, getcwd())
|
||||||
|
@@ -9,7 +9,7 @@ func Test_cd_up_and_down()
|
|||||||
let path = getcwd()
|
let path = getcwd()
|
||||||
cd ..
|
cd ..
|
||||||
call assert_notequal(path, getcwd())
|
call assert_notequal(path, getcwd())
|
||||||
exe 'cd ' . path
|
exe 'cd ' .. fnameescape(path)
|
||||||
call assert_equal(path, getcwd())
|
call assert_equal(path, getcwd())
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ func Test_cd_no_arg()
|
|||||||
cd
|
cd
|
||||||
call assert_equal($HOME, getcwd())
|
call assert_equal($HOME, getcwd())
|
||||||
call assert_notequal(path, getcwd())
|
call assert_notequal(path, getcwd())
|
||||||
exe 'cd ' . path
|
exe 'cd ' .. fnameescape(path)
|
||||||
call assert_equal(path, getcwd())
|
call assert_equal(path, getcwd())
|
||||||
else
|
else
|
||||||
" Test that cd without argument echoes cwd on non-Unix systems.
|
" Test that cd without argument echoes cwd on non-Unix systems.
|
||||||
@@ -58,7 +58,7 @@ func Test_cd_with_cpo_chdir()
|
|||||||
|
|
||||||
" :cd should succeed when buffer has been written.
|
" :cd should succeed when buffer has been written.
|
||||||
w!
|
w!
|
||||||
exe 'cd ' . path
|
exe 'cd ' .. fnameescape(path)
|
||||||
call assert_equal(path, getcwd())
|
call assert_equal(path, getcwd())
|
||||||
|
|
||||||
call delete('Xfoo')
|
call delete('Xfoo')
|
||||||
@@ -103,6 +103,6 @@ func Test_chdir_func()
|
|||||||
call assert_equal("", d)
|
call assert_equal("", d)
|
||||||
|
|
||||||
only | tabonly
|
only | tabonly
|
||||||
exe 'cd ' . topdir
|
call chdir(topdir)
|
||||||
call delete('Xdir', 'rf')
|
call delete('Xdir', 'rf')
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -35,7 +35,7 @@ func Test_with_tilde()
|
|||||||
call assert_true(isdirectory('Xdir ~ dir'))
|
call assert_true(isdirectory('Xdir ~ dir'))
|
||||||
cd Xdir\ ~\ dir
|
cd Xdir\ ~\ dir
|
||||||
call assert_true(getcwd() =~ 'Xdir \~ dir')
|
call assert_true(getcwd() =~ 'Xdir \~ dir')
|
||||||
exe 'cd ' . fnameescape(dir)
|
call chdir(dir)
|
||||||
call delete('Xdir ~ dir', 'd')
|
call delete('Xdir ~ dir', 'd')
|
||||||
call assert_false(isdirectory('Xdir ~ dir'))
|
call assert_false(isdirectory('Xdir ~ dir'))
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -36,7 +36,7 @@ func Test_find_complete()
|
|||||||
" We shouldn't find any file till this point
|
" We shouldn't find any file till this point
|
||||||
|
|
||||||
call mkdir('in/path', 'p')
|
call mkdir('in/path', 'p')
|
||||||
exe 'cd ' . cwd
|
call chdir(cwd)
|
||||||
call writefile(['Holy Grail'], 'Xfind/file.txt')
|
call writefile(['Holy Grail'], 'Xfind/file.txt')
|
||||||
call writefile(['Jimmy Hoffa'], 'Xfind/in/file.txt')
|
call writefile(['Jimmy Hoffa'], 'Xfind/in/file.txt')
|
||||||
call writefile(['Another Holy Grail'], 'Xfind/in/stuff.txt')
|
call writefile(['Another Holy Grail'], 'Xfind/in/stuff.txt')
|
||||||
@@ -133,12 +133,12 @@ func Test_find_complete()
|
|||||||
call assert_equal('Voyager 2', getline(1))
|
call assert_equal('Voyager 2', getline(1))
|
||||||
|
|
||||||
" Check for correct handling of shorten_fname()'s behavior on windows
|
" Check for correct handling of shorten_fname()'s behavior on windows
|
||||||
exec "cd " . cwd . "/Xfind/in"
|
call chdir(cwd .. "/Xfind/in")
|
||||||
call feedkeys(":find file\t\n", "xt")
|
call feedkeys(":find file\t\n", "xt")
|
||||||
call assert_equal('Jimmy Hoffa', getline(1))
|
call assert_equal('Jimmy Hoffa', getline(1))
|
||||||
|
|
||||||
" Test for relative to current buffer 'path' item
|
" Test for relative to current buffer 'path' item
|
||||||
exec "cd " . cwd . "/Xfind/"
|
call chdir(cwd . "/Xfind/")
|
||||||
set path=./path
|
set path=./path
|
||||||
" Open the file where Jimmy Hoffa is found
|
" Open the file where Jimmy Hoffa is found
|
||||||
e in/file.txt
|
e in/file.txt
|
||||||
@@ -157,7 +157,7 @@ func Test_find_complete()
|
|||||||
call assert_equal('Another Holy Grail', getline(1))
|
call assert_equal('Another Holy Grail', getline(1))
|
||||||
|
|
||||||
enew | only
|
enew | only
|
||||||
exe 'cd ' . cwd
|
call chdir(cwd)
|
||||||
call delete('Xfind', 'rf')
|
call delete('Xfind', 'rf')
|
||||||
set path&
|
set path&
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -113,7 +113,7 @@ func Test_findfile()
|
|||||||
call assert_match('.*/Xdir1/bar', findfile('bar', '**;', 2))
|
call assert_match('.*/Xdir1/bar', findfile('bar', '**;', 2))
|
||||||
|
|
||||||
bwipe!
|
bwipe!
|
||||||
exe 'cd ' . save_dir
|
call chdir(save_dir)
|
||||||
call CleanFiles()
|
call CleanFiles()
|
||||||
let &path = save_path
|
let &path = save_path
|
||||||
let &shellslash = save_shellslash
|
let &shellslash = save_shellslash
|
||||||
@@ -170,7 +170,7 @@ func Test_finddir()
|
|||||||
call assert_match('.*/Xdir1/Xdir2', finddir('Xdir2', '**;', 2))
|
call assert_match('.*/Xdir1/Xdir2', finddir('Xdir2', '**;', 2))
|
||||||
call assert_equal('Xdir3', finddir('Xdir3', '**;', 1))
|
call assert_equal('Xdir3', finddir('Xdir3', '**;', 1))
|
||||||
|
|
||||||
exe 'cd ' . save_dir
|
call chdir(save_dir)
|
||||||
call CleanFiles()
|
call CleanFiles()
|
||||||
let &path = save_path
|
let &path = save_path
|
||||||
let &shellslash = save_shellslash
|
let &shellslash = save_shellslash
|
||||||
|
@@ -46,7 +46,7 @@ endfunction
|
|||||||
let g:cwd=getcwd()
|
let g:cwd=getcwd()
|
||||||
function TearDown()
|
function TearDown()
|
||||||
q
|
q
|
||||||
exec "cd " . g:cwd
|
call chdir(g:cwd)
|
||||||
call delete("Xtopdir", "rf")
|
call delete("Xtopdir", "rf")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@@ -51,7 +51,7 @@ func Test_ColonEight()
|
|||||||
call TestIt(file2, ':p:8', resfile2)
|
call TestIt(file2, ':p:8', resfile2)
|
||||||
call TestIt(nofile2, ':p:8', resnofile2)
|
call TestIt(nofile2, ':p:8', resnofile2)
|
||||||
call TestIt(nofile2, ':p:8:h', fnamemodify(resnofile2, ':h'))
|
call TestIt(nofile2, ':p:8:h', fnamemodify(resnofile2, ':h'))
|
||||||
exe 'cd ' . dir1
|
call chdir(dir1)
|
||||||
call TestIt(file1, ':.:8', strpart(resfile1, strlen(resdir1)+1))
|
call TestIt(file1, ':.:8', strpart(resfile1, strlen(resdir1)+1))
|
||||||
call TestIt(nofile1, ':.:8', strpart(resnofile1, strlen(resdir1)+1))
|
call TestIt(nofile1, ':.:8', strpart(resnofile1, strlen(resdir1)+1))
|
||||||
call TestIt(file2, ':.:8', strpart(resfile2, strlen(resdir1)+1))
|
call TestIt(file2, ':.:8', strpart(resfile2, strlen(resdir1)+1))
|
||||||
@@ -68,7 +68,7 @@ func Test_ColonEight()
|
|||||||
call delete(dir2, 'd')
|
call delete(dir2, 'd')
|
||||||
call delete(dir1, 'd')
|
call delete(dir1, 'd')
|
||||||
|
|
||||||
exe "cd " . save_dir
|
call chdir(save_dir)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_ColonEight_MultiByte()
|
func Test_ColonEight_MultiByte()
|
||||||
|
@@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2278,
|
||||||
/**/
|
/**/
|
||||||
2277,
|
2277,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user