Patch 8.1.0352
Problem:    Browsing compressed tar files does not always work.
Solution:   Use the "file" command to get the compression type.
Files:      runtime/autoload/tar.vim


*** ../vim-8.1.0351/runtime/autoload/tar.vim    2016-09-25 21:41:24.000000000 
+0200
--- runtime/autoload/tar.vim    2018-09-08 15:09:32.841486806 +0200
***************
*** 152,161 ****
     " assuming cygwin
     let tarfile=substitute(system("cygpath -u 
".shellescape(tarfile,0)),'\n$','','e')
    endif
    let curlast= line("$")
    if tarfile =~# '\.\(gz\|tgz\)$'
  "   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | 
".g:tar_cmd." -".g:tar_browseoptions." - ")
!    exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." 
-".g:tar_browseoptions." - "
    elseif tarfile =~# '\.lrp'
  "   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c 
-|".g:tar_cmd." -".g:tar_browseoptions." - ")
     exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." 
-".g:tar_browseoptions." - "
--- 152,163 ----
     " assuming cygwin
     let tarfile=substitute(system("cygpath -u 
".shellescape(tarfile,0)),'\n$','','e')
    endif
+ 
    let curlast= line("$")
    if tarfile =~# '\.\(gz\|tgz\)$'
+     let gzip_command = s:get_gzip_command(tarfile)
  "   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | 
".g:tar_cmd." -".g:tar_browseoptions." - ")
!    exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)." | 
".g:tar_cmd." -".g:tar_browseoptions." - "
    elseif tarfile =~# '\.lrp'
  "   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c 
-|".g:tar_cmd." -".g:tar_browseoptions." - ")
     exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." 
-".g:tar_browseoptions." - "
***************
*** 287,298 ****
    else
     let tar_secure= " "
    endif
    if tarfile =~# '\.bz2$'
  "   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| 
".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
     exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." 
-".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
    elseif tarfile =~# '\.\(gz\|tgz\)$'
  "   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| 
".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
!    exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." 
-".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
    elseif tarfile =~# '\.lrp$'
  "   call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c 
- | ".g:tar_cmd." -".g:tar_readoptions." - 
".tar_secure.shellescape(fname,1).decmp)
     exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | 
".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
--- 289,302 ----
    else
     let tar_secure= " "
    endif
+ 
    if tarfile =~# '\.bz2$'
  "   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| 
".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
     exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." 
-".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
    elseif tarfile =~# '\.\(gz\|tgz\)$'
+     let gzip_command = s:get_gzip_command(tarfile)
  "   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| 
".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
!    exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)."| 
".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
    elseif tarfile =~# '\.lrp$'
  "   call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c 
- | ".g:tar_cmd." -".g:tar_readoptions." - 
".tar_secure.shellescape(fname,1).decmp)
     exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | 
".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
***************
*** 389,394 ****
--- 393,400 ----
    let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
    let fname   = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
  
+   let gzip_command = s:get_gzip_command(tarfile)
+ 
    " handle compressed archives
    if tarfile =~# '\.bz2'
     call system("bzip2 -d -- ".shellescape(tarfile,0))
***************
*** 396,407 ****
     let compress= "bzip2 -- ".shellescape(tarfile,0)
  "   call Decho("compress<".compress.">")
    elseif tarfile =~# '\.gz'
!    call system("gzip -d -- ".shellescape(tarfile,0))
     let tarfile = substitute(tarfile,'\.gz','','e')
     let compress= "gzip -- ".shellescape(tarfile,0)
  "   call Decho("compress<".compress.">")
    elseif tarfile =~# '\.tgz'
!    call system("gzip -d -- ".shellescape(tarfile,0))
     let tarfile = substitute(tarfile,'\.tgz','.tar','e')
     let compress= "gzip -- ".shellescape(tarfile,0)
     let tgz     = 1
--- 402,413 ----
     let compress= "bzip2 -- ".shellescape(tarfile,0)
  "   call Decho("compress<".compress.">")
    elseif tarfile =~# '\.gz'
!    call system(gzip_command . " -d -- ".shellescape(tarfile,0))
     let tarfile = substitute(tarfile,'\.gz','','e')
     let compress= "gzip -- ".shellescape(tarfile,0)
  "   call Decho("compress<".compress.">")
    elseif tarfile =~# '\.tgz'
!    call system(gzip_command . " -d -- ".shellescape(tarfile,0))
     let tarfile = substitute(tarfile,'\.tgz','.tar','e')
     let compress= "gzip -- ".shellescape(tarfile,0)
     let tgz     = 1
***************
*** 581,587 ****
  
    " if necessary, decompress the tarball; then, extract it
    if tartail =~ '\.tgz'
!    if executable("gunzip")
      silent exe "!gunzip ".shellescape(tartail)
     elseif executable("gzip")
      silent exe "!gzip -d ".shellescape(tartail)
--- 587,596 ----
  
    " if necessary, decompress the tarball; then, extract it
    if tartail =~ '\.tgz'
!    let gzip_command = s:get_gzip_command(tarfile)
!    if executable(gzip_command)
!     silent exe "!" . gzip_command . " -d ".shellescape(tartail)
!    elseif executable("gunzip")
      silent exe "!gunzip ".shellescape(tartail)
     elseif executable("gzip")
      silent exe "!gzip -d ".shellescape(tartail)
***************
*** 619,624 ****
--- 628,655 ----
  "  call Dret("tar#Vimuntar")
  endfun
  
+ func s:get_gzip_command(file)
+   " Try using the "file" command to get the actual compression type, since
+   " there is no standard way for the naming: ".tgz", ".tbz", ".txz", etc.
+   " If the "file" command doesn't work fall back to just using the file name.
+   if a:file =~# 'z$'
+     let filetype = system('file ' . a:file)
+     if filetype =~ 'bzip2 compressed' && executable('bzip2')
+       return 'bzip2'
+     endif
+     if filetype =~ 'XZ compressed' && executable('xz')
+       return 'xz'
+     endif
+   endif
+   if a:file =~# 'bz2$'
+     return 'bzip2'
+   endif
+   if a:file =~# 'xz$'
+     return 'xz'
+   endif
+   return 'gzip'
+ endfunc
+ 
  " =====================================================================
  " Modelines And Restoration: {{{1
  let &cpo= s:keepcpo
*** ../vim-8.1.0351/src/version.c       2018-09-06 21:44:13.660006996 +0200
--- src/version.c       2018-09-08 14:57:29.304425238 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     352,
  /**/

-- 
If Pacman had affected us as kids we'd be running around in dark rooms,
munching pills and listening to repetitive music.
                       -- Marcus Brigstocke

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui