Fix base_path() to handle filenames with colons

This bug was introduced when teaching gitgutter to handle file moves
in #872.

Fixes #877.
This commit is contained in:
Andy Stewart
2024-01-03 16:06:27 +00:00
parent 4b49965897
commit 84bc2d68c0
2 changed files with 16 additions and 1 deletions

View File

@@ -252,7 +252,8 @@ function! gitgutter#utility#base_path(bufnr)
" If we already know the original path at this diff base, return it.
let basepath = gitgutter#utility#getbufvar(a:bufnr, 'basepath', '')
if !empty(basepath)
let [base, bpath] = split(basepath, ':', 1)
let i = strridx(basepath, ':')
let [base, bpath] = [basepath[0:i-1], basepath[i+1:]]
if base == diffbase
return gitgutter#utility#shellescape(bpath)
endif

View File

@@ -196,6 +196,20 @@ function Test_filename_with_equals()
endfunction
function Test_filename_with_colon()
call system('touch fix:ture.txt && git add fix:ture.txt')
edit fix:ture.txt
normal ggo*
call s:trigger_gitgutter()
let expected = [
\ {'lnum': 1, 'name': 'GitGutterLineAdded'},
\ {'lnum': 2, 'name': 'GitGutterLineAdded'}
\ ]
call s:assert_signs(expected, 'fix:ture.txt')
endfunction
function Test_filename_with_square_brackets()
call system('touch fix[tu]re.txt && git add fix[tu]re.txt')
edit fix[tu]re.txt