Fix handling of file renames

Both `:file` and `:saveas` rename the current file.

`:file` does not write the newly named file to disk, and keeps the same
buffer.  It fires a single `BufFilePre` / `BufFilePost` pair of
autocommands:

    `BufFilePre`     buffer
    `BufFilePost`    buffer

`:saveas` does write the newly named file to disk, in a new buffer.  It
fires two pairs of `BufFilePre` / `BufFilePost` autocommands:

    `BufFilePre`     original buffer
    `BufFilePre`     new buffer
    `BufFilePost`    original buffer
    `BufFilePost`    new buffer

In both cases the cached path needs to be cleared.

See #860, #551.
Fixes #865.
This commit is contained in:
Andy Stewart
2023-07-31 13:37:11 +01:00
parent 458603713d
commit 68f16eb21f
2 changed files with 60 additions and 2 deletions

View File

@@ -251,6 +251,35 @@ function Test_filename_umlaut()
endfunction
function Test_file_cmd()
normal ggo*
file other.txt
call s:trigger_gitgutter()
call assert_equal(1, b:gitgutter.enabled)
call assert_equal('', b:gitgutter.path)
call s:assert_signs([], 'other.txt')
write
call s:trigger_gitgutter()
call assert_equal(-2, b:gitgutter.path)
endfunction
function Test_saveas()
normal ggo*
saveas other.txt
call s:trigger_gitgutter()
call assert_equal(1, b:gitgutter.enabled)
call assert_equal(-2, b:gitgutter.path)
call s:assert_signs([], 'other.txt')
endfunction
" FIXME: this test fails when it is the first (or only) test to be run
function Test_follow_symlink()
let tmp = 'symlink'