Support extensions.worktreeConfig

Resolves: https://github.com/tpope/vim-fugitive/issues/1898
This commit is contained in:
Tim Pope
2022-01-11 18:35:28 -05:00
parent f4d94c5985
commit a93ceff61f

View File

@@ -344,22 +344,32 @@ function! s:Tree(path) abort
endif endif
if !has_key(s:worktree_for_dir, dir) if !has_key(s:worktree_for_dir, dir)
let s:worktree_for_dir[dir] = '' let s:worktree_for_dir[dir] = ''
let ext_wtc_pat = 'v:val =~# "^\\s*worktreeConfig *= *\\%(true\\|yes\\|on\\|1\\) *$"'
let config = s:ReadFile(dir . '/config', 10) let config = s:ReadFile(dir . '/config', 10)
if len(config) if len(config)
let wt_config = filter(copy(config),'v:val =~# "^\\s*worktree *="') let ext_wtc_config = filter(copy(config), ext_wtc_pat)
if len(wt_config) == 1 if len(ext_wtc_config) == 1 && filereadable(dir . '/config.worktree')
let worktree = FugitiveVimPath(matchstr(wt_config[0], '= *\zs.*')) let config += s:ReadFile(dir . '/config.worktree', 10)
else
call filter(config,'v:val =~# "^\\s*bare *= *true *$"')
if empty(config)
let s:worktree_for_dir[dir] = 0
endif
endif endif
else else
let worktree = fnamemodify(FugitiveVimPath(get(s:ReadFile(dir . '/gitdir', 1), '0', '')), ':h') let worktree = fnamemodify(FugitiveVimPath(get(s:ReadFile(dir . '/gitdir', 1), '0', '')), ':h')
if worktree ==# '.' if worktree ==# '.'
unlet! worktree unlet! worktree
endif endif
if len(filter(s:ReadFile(FugitiveCommonDir(dir) . '/config', 10), ext_wtc_pat))
let config = s:ReadFile(dir . '/config.worktree', 10)
endif
endif
if len(config)
let wt_config = filter(copy(config), 'v:val =~# "^\\s*worktree *="')
if len(wt_config)
let worktree = FugitiveVimPath(matchstr(wt_config[0], '= *\zs.*'))
elseif !exists('worktree')
call filter(config,'v:val =~# "^\\s*bare *= *true *$"')
if empty(config)
let s:worktree_for_dir[dir] = 0
endif
endif
endif endif
if exists('worktree') if exists('worktree')
let s:worktree_for_dir[dir] = s:Slash(resolve(worktree)) let s:worktree_for_dir[dir] = s:Slash(resolve(worktree))