1
0
forked from aniani/vim

patch 8.1.0334: 'autowrite' takes effect when buffer is not to be written

Problem:    'autowrite' takes effect when buffer is not to be written.
Solution:   Don't write buffers that are not supposed to be written. (Even Q
            Jones, closes #3391)  Add tests for 'autowrite'.
This commit is contained in:
Bram Moolenaar
2018-08-30 13:07:17 +02:00
parent 92c1b69641
commit 8c9e7b00f6
3 changed files with 42 additions and 2 deletions

View File

@@ -2041,7 +2041,7 @@ autowrite(buf_T *buf, int forceit)
} }
/* /*
* flush all buffers, except the ones that are readonly * Flush all buffers, except the ones that are readonly or are never written.
*/ */
void void
autowrite_all(void) autowrite_all(void)
@@ -2051,7 +2051,7 @@ autowrite_all(void)
if (!(p_aw || p_awa) || !p_write) if (!(p_aw || p_awa) || !p_write)
return; return;
FOR_ALL_BUFFERS(buf) FOR_ALL_BUFFERS(buf)
if (bufIsChanged(buf) && !buf->b_p_ro) if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf))
{ {
bufref_T bufref; bufref_T bufref;

View File

@@ -112,3 +112,41 @@ func Test_writefile_sync_dev_stdout()
throw 'Skipped: /dev/stdout is not writable' throw 'Skipped: /dev/stdout is not writable'
endif endif
endfunc endfunc
func Test_writefile_autowrite()
set autowrite
new
next Xa Xb Xc
call setline(1, 'aaa')
next
call assert_equal(['aaa'], readfile('Xa'))
call setline(1, 'bbb')
call assert_fails('edit XX')
call assert_false(filereadable('Xb'))
set autowriteall
edit XX
call assert_equal(['bbb'], readfile('Xb'))
bwipe!
call delete('Xa')
call delete('Xb')
set noautowrite
endfunc
func Test_writefile_autowrite_nowrite()
set autowrite
new
next Xa Xb Xc
set buftype=nowrite
call setline(1, 'aaa')
let buf = bufnr('%')
" buffer contents silently lost
edit XX
call assert_false(filereadable('Xa'))
rewind
call assert_equal('', getline(1))
bwipe!
set noautowrite
endfunc

View File

@@ -794,6 +794,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
334,
/**/ /**/
333, 333,
/**/ /**/