[GFiles] Use ls-files --deduplicate only on git 2.31 or above

Close #1446
This commit is contained in:
Junegunn Choi
2022-12-24 10:33:45 +09:00
parent 7434543270
commit fd7fab77b2

View File

@@ -609,6 +609,23 @@ function! s:get_git_root(dir)
return v:shell_error ? '' : (len(a:dir) ? fnamemodify(a:dir, ':p') : root)
endfunction
function! s:version_requirement(val, min)
for idx in range(0, len(a:min) - 1)
let v = get(a:val, idx, 0)
if v < a:min[idx] | return 0
elseif v > a:min[idx] | return 1
endif
endfor
return 1
endfunction
function! s:git_version_requirement(...)
if !exists('s:git_version')
let s:git_version = map(split(split(system('git --version'))[2], '\.'), 'str2nr(v:val)')
endif
return s:version_requirement(s:git_version, a:000)
endfunction
function! fzf#vim#gitfiles(args, ...)
let dir = get(get(a:, 1, {}), 'dir', '')
let root = s:get_git_root(dir)
@@ -617,8 +634,12 @@ function! fzf#vim#gitfiles(args, ...)
endif
let prefix = 'git -C ' . fzf#shellescape(root) . ' '
if a:args != '?'
let source = prefix . 'ls-files -z'
if s:git_version_requirement(2, 31)
let source .= ' --deduplicate'
endif
return s:fzf('gfiles', {
\ 'source': prefix . 'ls-files -z --deduplicate',
\ 'source': source,
\ 'dir': root,
\ 'options': '-m --read0 --prompt "GitFiles> "'
\}, a:000)