diff options
| -rw-r--r-- | src/nvim/fileio.c | 8 | ||||
| -rw-r--r-- | src/nvim/testdir/test_stat.vim | 56 | 
2 files changed, 55 insertions, 9 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 78fac5acf8..8b650d0d5b 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -4892,10 +4892,12 @@ 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 (!file_info_ok) { -      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;      } else { diff --git a/src/nvim/testdir/test_stat.vim b/src/nvim/testdir/test_stat.vim index 0a09130b0c..8c44c2ed65 100644 --- a/src/nvim/testdir/test_stat.vim +++ b/src/nvim/testdir/test_stat.vim @@ -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 2 +  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 2 -  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'  | 
