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;
/* 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;
}

View File

@ -46,6 +46,15 @@ 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'
@ -53,12 +62,7 @@ func Test_checktime()
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'

View File

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