72 lines
3.0 KiB
Diff
72 lines
3.0 KiB
Diff
From 3d37231437fc0f761664a7cabc8f7b927b468767 Mon Sep 17 00:00:00 2001
|
|
From: Christian Brabandt <cb@256bit.org>
|
|
Date: Sun, 5 Nov 2023 17:44:05 +0100
|
|
Subject: [PATCH] runtime(tar): improve the error detection
|
|
|
|
Do not rely on the fact, that the last line matches warning, error,
|
|
inappropriate or unrecognized to determine if an error occurred. It
|
|
could also be a file, contains such a keyword.
|
|
|
|
So make the error detection slightly more strict and only assume an
|
|
error occured, if in addition to those 4 keywords, also a space matches
|
|
(this assumes the error message contains a space), which luckily on Unix
|
|
not many files match by default.
|
|
|
|
The whole if condition seems however slightly dubious. In case an error
|
|
happened, this would probably already be caught in the previous if
|
|
statement, since this checks for the return code of the tar program.
|
|
|
|
There may however be tar implementations, that do not set the exit code
|
|
for some kind of error (but print an error message)? But let's keep this
|
|
check for now, not many people have noticed this behaviour until now, so
|
|
it seems to work reasonably well anyhow.
|
|
|
|
related: #6425
|
|
fixes: #13489
|
|
Signed-off-by: Christian Brabandt <cb@256bit.org>
|
|
---
|
|
runtime/autoload/tar.vim | 17 +++++++++++++----
|
|
1 file changed, 13 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/runtime/autoload/tar.vim b/runtime/autoload/tar.vim
|
|
index e495e8262a93f..52369a42c1c1b 100644
|
|
--- a/runtime/autoload/tar.vim
|
|
+++ b/runtime/autoload/tar.vim
|
|
@@ -1,7 +1,7 @@
|
|
" tar.vim: Handles browsing tarfiles
|
|
" AUTOLOAD PORTION
|
|
-" Date: Jan 07, 2020
|
|
-" Version: 32
|
|
+" Date: Nov 05, 2023
|
|
+" Version: 32a (with modifications from the Vim Project)
|
|
" Maintainer: Charles E Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
|
|
" License: Vim License (see vim's :help license)
|
|
"
|
|
@@ -22,7 +22,7 @@
|
|
if &cp || exists("g:loaded_tar")
|
|
finish
|
|
endif
|
|
-let g:loaded_tar= "v32"
|
|
+let g:loaded_tar= "v32a"
|
|
if v:version < 702
|
|
echohl WarningMsg
|
|
echo "***warning*** this version of tar needs vim 7.2"
|
|
@@ -208,7 +208,16 @@ fun! tar#Browse(tarfile)
|
|
" call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
|
|
return
|
|
endif
|
|
- if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~# '\c\%(warning\|error\|inappropriate\|unrecognized\)')
|
|
+ " If there was an error message, the last line probably matches some keywords but
|
|
+ " should also contain whitespace for readability. Make sure not to match a
|
|
+ " filename that contains the keyword (error/warning/unrecognized/inappropriate, etc)
|
|
+ "
|
|
+ " FIXME:is this actually necessary? In case of an error, we should probably
|
|
+ " have noticed in the if statement above since tar should have exited
|
|
+ " with a non-zero exit code.
|
|
+ if line("$") == curlast || ( line("$") == (curlast + 1) &&
|
|
+ \ getline("$") =~# '\c\<\%(warning\|error\|inappropriate\|unrecognized\)\>' &&
|
|
+ \ getline("$") =~ '\s' )
|
|
redraw!
|
|
echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
|
|
keepj sil! %d
|