0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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

Problem:    Buffer not updated with 'autoread' set if file was deleted.
            (Michael Naumann)
Solution:   Don't set the timestamp to zero. (closes #3165)
This commit is contained in:
Bram Moolenaar 2018-07-07 18:34:12 +02:00
parent cbbe4ab4b2
commit 386bc82a3f
3 changed files with 57 additions and 9 deletions

View File

@ -6923,11 +6923,13 @@ buf_check_timestamp(
{ {
retval = 1; retval = 1;
/* set b_mtime to stop further warnings (e.g., when executing // set b_mtime to stop further warnings (e.g., when executing
* FileChangedShell autocmd) */ // FileChangedShell autocmd)
if (stat_res < 0) 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_size = 0;
buf->b_orig_mode = 0; buf->b_orig_mode = 0;
} }

View File

@ -46,6 +46,15 @@ func Test_existent_directory()
call assert_equal('rwx', getfperm(dname)[0:2]) call assert_equal('rwx', getfperm(dname)[0:2])
endfunc 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() func Test_checktime()
let fname = 'Xtest.tmp' let fname = 'Xtest.tmp'
@ -53,12 +62,7 @@ func Test_checktime()
call writefile(fl, fname) call writefile(fl, fname)
set autoread set autoread
exec 'e' fname exec 'e' fname
" FAT has a granularity of 2 seconds, otherwise it's usually 1 second call SleepForTimestamp()
if has('win32')
sleep 2
else
sleep 1
endif
let fl = readfile(fname) let fl = readfile(fname)
let fl[0] .= ' - checktime' let fl[0] .= ' - checktime'
call writefile(fl, fname) call writefile(fl, fname)
@ -68,6 +72,46 @@ func Test_checktime()
call delete(fname) call delete(fname)
endfunc 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() func Test_nonexistent_file()
let fname = 'Xtest.tmp' let fname = 'Xtest.tmp'

View File

@ -789,6 +789,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 */
/**/
161,
/**/ /**/
160, 160,
/**/ /**/