mirror of
https://github.com/neovim/neovim.git
synced 2026-07-31 04:39:07 +00:00
vim-patch:e241ac0: runtime(zip): fix failure on Windows CI
Problem: The zip autoload script aborts loading when the "zip"
command is not available, so even read-only browsing of an
archive fails with E117 (zip#Browse undefined) on systems
that have "unzip" but not "zip" (e.g. the Windows CI
runner). Regressed in b0e0b22.
Solution: Drop the load-time executable gate and check each command
per operation instead, so a missing "zip" only affects
writing. Update the test to match the reworded message.
e241ac0a62
Co-authored-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
30
runtime/pack/dist/opt/old-zip/autoload/zip.vim
vendored
30
runtime/pack/dist/opt/old-zip/autoload/zip.vim
vendored
@@ -114,22 +114,17 @@ endfun
|
||||
" sanity checks
|
||||
" s:SafeExecutable: {{{2
|
||||
fun! s:SafeExecutable(exe)
|
||||
if !executable(a:exe) && !s:isPS()
|
||||
call s:Mess('Error', "***error*** (zip) '".a:exe."' not available on your system")
|
||||
" fails when exe is a full path with spaces
|
||||
let exe = substitute(a:exe, '\s\+.*$', '', '')
|
||||
if !executable(exe) && !s:isPS()
|
||||
return v:false
|
||||
endif
|
||||
if !dist#vim#IsSafeExecutable('zip', a:exe) && !s:isPS()
|
||||
call s:Mess('Error', "Warning: NOT executing " .. a:exe .. " from current directory!")
|
||||
if !dist#vim#IsSafeExecutable('zip', exe) && !s:isPS()
|
||||
call s:Mess('Error', "Warning: NOT executing " .. a:exe .. " from current directory!")
|
||||
return v:false
|
||||
endif
|
||||
return v:true
|
||||
endfun
|
||||
" guarantee default command is exist and not be injected by environment
|
||||
" every default command should be checked
|
||||
if !s:SafeExecutable(g:zip_zipcmd) | finish | endif
|
||||
if !s:SafeExecutable(g:zip_unzipcmd) | finish | endif
|
||||
if !s:SafeExecutable(g:zip_extractcmd) | finish | endif
|
||||
|
||||
" ----------------
|
||||
" PowerShell: {{{1
|
||||
" ----------------
|
||||
@@ -260,8 +255,8 @@ fun! zip#Browse(zipfile)
|
||||
defer s:RestoreOpts(dict)
|
||||
|
||||
" sanity checks
|
||||
if !executable(g:zip_unzipcmd) && !s:isPS()
|
||||
call s:Mess('Error', "***error*** (zip#Browse) unzip not available on your system")
|
||||
if !s:SafeExecutable(g:zip_unzipcmd)
|
||||
call s:Mess('Error', "***error*** (zip#Browse) sorry, your system doesn't appear to have the ".g:zip_unzipcmd." program")
|
||||
return
|
||||
endif
|
||||
if !filereadable(a:zipfile)
|
||||
@@ -368,7 +363,7 @@ fun! zip#Read(fname,mode)
|
||||
endif
|
||||
let fname = fname->substitute('[', '[[]', 'g')->escape('?*\\')
|
||||
" sanity check
|
||||
if !executable(substitute(g:zip_unzipcmd,'\s\+.*$','','')) && !s:isPS()
|
||||
if !s:SafeExecutable(g:zip_unzipcmd)
|
||||
call s:Mess('Error', "***error*** (zip#Read) sorry, your system doesn't appear to have the ".g:zip_unzipcmd." program")
|
||||
return
|
||||
endif
|
||||
@@ -404,7 +399,7 @@ fun! zip#Write(fname)
|
||||
defer s:RestoreOpts(dict)
|
||||
|
||||
" sanity checks
|
||||
if !executable(substitute(g:zip_zipcmd,'\s\+.*$','','')) && &shell !~ 'pwsh'
|
||||
if !s:SafeExecutable(g:zip_zipcmd)
|
||||
call s:Mess('Error', "***error*** (zip#Write) sorry, your system doesn't appear to have the ".g:zip_zipcmd." program")
|
||||
return
|
||||
endif
|
||||
@@ -532,6 +527,13 @@ fun! zip#Extract()
|
||||
|
||||
let dict = s:SetSaneOpts()
|
||||
defer s:RestoreOpts(dict)
|
||||
|
||||
" sanity checks
|
||||
if !s:SafeExecutable(g:zip_extractcmd)
|
||||
call s:Mess('Error', "***error*** (zip#Extract) sorry, your system doesn't appear to have the ".g:zip_extractcmd." program")
|
||||
return
|
||||
endif
|
||||
|
||||
let fname= getline(".")
|
||||
|
||||
" sanity check
|
||||
|
||||
@@ -87,7 +87,7 @@ func Test_zip_basic()
|
||||
"## Check opening zip when "unzip" program is missing
|
||||
let save_zip_unzipcmd = g:zip_unzipcmd
|
||||
let g:zip_unzipcmd = "/"
|
||||
call assert_match('unzip not available on your system', execute("e X.zip"))
|
||||
call assert_match('(zip#Browse) sorry, your system doesn''t appear to have the / program', execute("e X.zip"))
|
||||
|
||||
"## Check when "unzip" don't work
|
||||
if executable("false")
|
||||
|
||||
Reference in New Issue
Block a user