Permalink
Browse files

patch 8.1.0161: buffer not updated with 'autoread' set if file was de…

…leted

Problem:    Buffer not updated with 'autoread' set if file was deleted.
            (Michael Naumann)
Solution:   Don't set the timestamp to zero. (closes #3165)
  • Loading branch information...
brammool committed Jul 7, 2018
1 parent cbbe4ab commit 386bc82a3f82f70bad75aaad74dba57a176b5840
Showing with 57 additions and 9 deletions.
  1. +5 −3 src/fileio.c
  2. +50 −6 src/testdir/test_stat.vim
  3. +2 −0 src/version.c
@@ -6923,11 +6923,13 @@ buf_check_timestamp(
{
retval = 1;
/* set b_mtime to stop further warnings (e.g., when executing
* FileChangedShell autocmd) */
// set b_mtime to stop further warnings (e.g., when executing
// FileChangedShell autocmd)
if (stat_res < 0)
{
buf->b_mtime = 0;
// When 'autoread' is set we'll check the file again to see if it
// re-appears.
buf->b_mtime = buf->b_p_ar;
buf->b_orig_size = 0;
buf->b_orig_mode = 0;
}
@@ -46,19 +46,23 @@ func Test_existent_directory()
call assert_equal('rwx', getfperm(dname)[0:2])
endfunc
func SleepForTimestamp()
" FAT has a granularity of 2 seconds, otherwise it's usually 1 second
if has('win32')
sleep 2
else
sleep 1
endif
endfunc
func Test_checktime()
let fname = 'Xtest.tmp'
let fl = ['Hello World!']
call writefile(fl, fname)
set autoread
exec 'e' fname
" FAT has a granularity of 2 seconds, otherwise it's usually 1 second
if has('win32')
sleep 2
else
sleep 1
endif
call SleepForTimestamp()
let fl = readfile(fname)
let fl[0] .= ' - checktime'
call writefile(fl, fname)
@@ -68,6 +72,46 @@ func Test_checktime()
call delete(fname)
endfunc
func Test_autoread_file_deleted()
new Xautoread
set autoread
call setline(1, 'original')
w!
call SleepForTimestamp()
if has('win32')
silent !echo changed > Xautoread
else
silent !echo 'changed' > Xautoread
endif
checktime
call assert_equal('changed', trim(getline(1)))
call SleepForTimestamp()
messages clear
if has('win32')
silent !del Xautoread
else
silent !rm Xautoread
endif
checktime
call assert_match('E211:', execute('messages'))
call assert_equal('changed', trim(getline(1)))
call SleepForTimestamp()
if has('win32')
silent !echo recreated > Xautoread
else
silent !echo 'recreated' > Xautoread
endif
checktime
call assert_equal('recreated', trim(getline(1)))
call delete('Xautoread')
bwipe!
endfunc
func Test_nonexistent_file()
let fname = 'Xtest.tmp'
@@ -789,6 +789,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
161,
/**/
160,
/**/

0 comments on commit 386bc82

Please sign in to comment.