mirror of https://github.com/vim/vim.git
patch 8.1.1349: if writing runs into conversion error backup file is deleted
Problem: If writing runs into a conversion error the backup file is deleted. (Arseny Nasokin) Solution: Don't delete the backup file is the file was overwritten and a conversion error occurred. (Christian Brabandt, closes #4387)
This commit is contained in:
parent
f8191c5f07
commit
cf0bfd9ade
|
@ -4985,10 +4985,10 @@ restore_backup:
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Remove the backup unless 'backup' option is set
|
||||
*/
|
||||
if (!p_bk && backup != NULL && mch_remove(backup) != 0)
|
||||
// Remove the backup unless 'backup' option is set or there was a
|
||||
// conversion error.
|
||||
if (!p_bk && backup != NULL && !write_info.bw_conv_error
|
||||
&& mch_remove(backup) != 0)
|
||||
emsg(_("E207: Can't delete backup file"));
|
||||
|
||||
goto nofail;
|
||||
|
|
|
@ -36,13 +36,15 @@ func Test_writefile_fails_conversion()
|
|||
if !has('iconv') || has('sun')
|
||||
return
|
||||
endif
|
||||
" Without a backup file the write won't happen if there is a conversion
|
||||
" error.
|
||||
set nobackup nowritebackup
|
||||
new
|
||||
let contents = ["line one", "line two"]
|
||||
call writefile(contents, 'Xfile')
|
||||
edit Xfile
|
||||
call setline(1, ["first line", "cannot convert \u010b", "third line"])
|
||||
call assert_fails('write ++enc=cp932')
|
||||
call assert_fails('write ++enc=cp932', 'E513:')
|
||||
call assert_equal(contents, readfile('Xfile'))
|
||||
|
||||
call delete('Xfile')
|
||||
|
@ -50,6 +52,27 @@ func Test_writefile_fails_conversion()
|
|||
set backup& writebackup&
|
||||
endfunc
|
||||
|
||||
func Test_writefile_fails_conversion2()
|
||||
if !has('iconv') || has('sun')
|
||||
return
|
||||
endif
|
||||
" With a backup file the write happens even if there is a conversion error,
|
||||
" but then the backup file must remain
|
||||
set nobackup writebackup
|
||||
let contents = ["line one", "line two"]
|
||||
call writefile(contents, 'Xfile_conversion_err')
|
||||
edit Xfile_conversion_err
|
||||
call setline(1, ["first line", "cannot convert \u010b", "third line"])
|
||||
set fileencoding=latin1
|
||||
let output = execute('write')
|
||||
call assert_match('CONVERSION ERROR', output)
|
||||
call assert_equal(contents, readfile('Xfile_conversion_err~'))
|
||||
|
||||
call delete('Xfile_conversion_err')
|
||||
call delete('Xfile_conversion_err~')
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func SetFlag(timer)
|
||||
let g:flag = 1
|
||||
endfunc
|
||||
|
|
|
@ -767,6 +767,8 @@ static char *(features[]) =
|
|||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1349,
|
||||
/**/
|
||||
1348,
|
||||
/**/
|
||||
|
|
Loading…
Reference in New Issue