diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-05-18 14:05:58 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-05-18 14:12:08 -0400 |
commit | d07a6e2b45175439891beafc5e75f68f92eabd65 (patch) | |
tree | ae3c6e839c6422976af55f8f0a7a77eb282733ec /src | |
parent | f286af170d57b85f59457ff16e6716163b69d8ba (diff) | |
download | rneovim-d07a6e2b45175439891beafc5e75f68f92eabd65.tar.gz rneovim-d07a6e2b45175439891beafc5e75f68f92eabd65.tar.bz2 rneovim-d07a6e2b45175439891beafc5e75f68f92eabd65.zip |
vim-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 vim/vim#4387)
https://github.com/vim/vim/commit/cf0bfd9ade5173bcc12563bfc90c21a4db10535d
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/fileio.c | 6 | ||||
-rw-r--r-- | src/nvim/testdir/test_writefile.vim | 25 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 507bf3c032..8e4a210b66 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -3693,9 +3693,11 @@ restore_backup: /* * Remove the backup unless 'backup' option is set */ - if (!p_bk && backup != NULL && os_remove((char *)backup) != 0) + if (!p_bk && backup != NULL + && !write_info.bw_conv_error + && os_remove((char *)backup) != 0) { EMSG(_("E207: Can't delete backup file")); - + } goto nofail; diff --git a/src/nvim/testdir/test_writefile.vim b/src/nvim/testdir/test_writefile.vim index 1cd5fb306a..b4585a72ef 100644 --- a/src/nvim/testdir/test_writefile.vim +++ b/src/nvim/testdir/test_writefile.vim @@ -36,13 +36,15 @@ func Test_writefile_fails_conversion() if !has('multi_byte') || !has('iconv') 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 |