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:
parent
cbbe4ab4b2
commit
386bc82a3f
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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'
|
||||||
|
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user