summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-08-30 13:07:17 +0200
committerBram Moolenaar <Bram@vim.org>2018-08-30 13:07:17 +0200
commit8c9e7b00f6566dc41e794ef11c93d93b034c7134 (patch)
tree56a99a9d90f4800e1cf20f136affc8a15b2e786f
parent92c1b696413bf0e28f2fec22090d42e8a825eff2 (diff)
patch 8.1.0334: 'autowrite' takes effect when buffer is not to be writtenv8.1.0334
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'.
-rw-r--r--src/ex_cmds2.c4
-rw-r--r--src/testdir/test_writefile.vim38
-rw-r--r--src/version.c2
3 files changed, 42 insertions, 2 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index cb046357db..89effa1417 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -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
autowrite_all(void)
@@ -2051,7 +2051,7 @@ autowrite_all(void)
if (!(p_aw || p_awa) || !p_write)
return;
FOR_ALL_BUFFERS(buf)
- if (bufIsChanged(buf) && !buf->b_p_ro)
+ if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf))
{
bufref_T bufref;
diff --git a/src/testdir/test_writefile.vim b/src/testdir/test_writefile.vim
index 672ddd3a74..8e621b3cb2 100644
--- a/src/testdir/test_writefile.vim
+++ b/src/testdir/test_writefile.vim
@@ -112,3 +112,41 @@ func Test_writefile_sync_dev_stdout()
throw 'Skipped: /dev/stdout is not writable'
endif
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
diff --git a/src/version.c b/src/version.c
index c2f64d37ab..db1f8e2c81 100644
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 334,
+/**/
333,
/**/
332,