mirror of
https://github.com/junegunn/fzf.vim.git
synced 2025-12-08 13:34:47 +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)
|
return v:shell_error ? '' : (len(a:dir) ? fnamemodify(a:dir, ':p') : root)
|
||||||
endfunction
|
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, ...)
|
function! fzf#vim#gitfiles(args, ...)
|
||||||
let dir = get(get(a:, 1, {}), 'dir', '')
|
let dir = get(get(a:, 1, {}), 'dir', '')
|
||||||
let root = s:get_git_root(dir)
|
let root = s:get_git_root(dir)
|
||||||
@@ -617,8 +634,12 @@ function! fzf#vim#gitfiles(args, ...)
|
|||||||
endif
|
endif
|
||||||
let prefix = 'git -C ' . fzf#shellescape(root) . ' '
|
let prefix = 'git -C ' . fzf#shellescape(root) . ' '
|
||||||
if a:args != '?'
|
if a:args != '?'
|
||||||
|
let source = prefix . 'ls-files -z'
|
||||||
|
if s:git_version_requirement(2, 31)
|
||||||
|
let source .= ' --deduplicate'
|
||||||
|
endif
|
||||||
return s:fzf('gfiles', {
|
return s:fzf('gfiles', {
|
||||||
\ 'source': prefix . 'ls-files -z --deduplicate',
|
\ 'source': source,
|
||||||
\ 'dir': root,
|
\ 'dir': root,
|
||||||
\ 'options': '-m --read0 --prompt "GitFiles> "'
|
\ 'options': '-m --read0 --prompt "GitFiles> "'
|
||||||
\}, a:000)
|
\}, a:000)
|
||||||
|
|||||||
Reference in New Issue
Block a user