mirror of
https://github.com/junegunn/fzf.vim.git
synced 2025-12-06 20:54:28 +08:00
[GFiles] Use ls-files --deduplicate only on git 2.31 or above
Close #1446
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user