From a93ceff61f070a095c3c712c389247a80897e3b0 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Tue, 11 Jan 2022 18:35:28 -0500 Subject: [PATCH] Support extensions.worktreeConfig Resolves: https://github.com/tpope/vim-fugitive/issues/1898 --- plugin/fugitive.vim | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim index 7b6ce09..91e93f2 100644 --- a/plugin/fugitive.vim +++ b/plugin/fugitive.vim @@ -344,22 +344,32 @@ function! s:Tree(path) abort endif if !has_key(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) if len(config) - let wt_config = filter(copy(config),'v:val =~# "^\\s*worktree *="') - if len(wt_config) == 1 - let worktree = FugitiveVimPath(matchstr(wt_config[0], '= *\zs.*')) - else - call filter(config,'v:val =~# "^\\s*bare *= *true *$"') - if empty(config) - let s:worktree_for_dir[dir] = 0 - endif + let ext_wtc_config = filter(copy(config), ext_wtc_pat) + if len(ext_wtc_config) == 1 && filereadable(dir . '/config.worktree') + let config += s:ReadFile(dir . '/config.worktree', 10) endif else let worktree = fnamemodify(FugitiveVimPath(get(s:ReadFile(dir . '/gitdir', 1), '0', '')), ':h') if worktree ==# '.' unlet! worktree 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 if exists('worktree') let s:worktree_for_dir[dir] = s:Slash(resolve(worktree))