Skip to content

Commit a93ceff

Browse files
committed
Support extensions.worktreeConfig
Resolves: #1898
1 parent f4d94c5 commit a93ceff

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

plugin/fugitive.vim

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -344,22 +344,32 @@ function! s:Tree(path) abort
344344
endif
345345
if !has_key(s:worktree_for_dir, dir)
346346
let s:worktree_for_dir[dir] = ''
347+
let ext_wtc_pat = 'v:val =~# "^\\s*worktreeConfig *= *\\%(true\\|yes\\|on\\|1\\) *$"'
347348
let config = s:ReadFile(dir . '/config', 10)
348349
if len(config)
349-
let wt_config = filter(copy(config),'v:val =~# "^\\s*worktree *="')
350-
if len(wt_config) == 1
351-
let worktree = FugitiveVimPath(matchstr(wt_config[0], '= *\zs.*'))
352-
else
353-
call filter(config,'v:val =~# "^\\s*bare *= *true *$"')
354-
if empty(config)
355-
let s:worktree_for_dir[dir] = 0
356-
endif
350+
let ext_wtc_config = filter(copy(config), ext_wtc_pat)
351+
if len(ext_wtc_config) == 1 && filereadable(dir . '/config.worktree')
352+
let config += s:ReadFile(dir . '/config.worktree', 10)
357353
endif
358354
else
359355
let worktree = fnamemodify(FugitiveVimPath(get(s:ReadFile(dir . '/gitdir', 1), '0', '')), ':h')
360356
if worktree ==# '.'
361357
unlet! worktree
362358
endif
359+
if len(filter(s:ReadFile(FugitiveCommonDir(dir) . '/config', 10), ext_wtc_pat))
360+
let config = s:ReadFile(dir . '/config.worktree', 10)
361+
endif
362+
endif
363+
if len(config)
364+
let wt_config = filter(copy(config), 'v:val =~# "^\\s*worktree *="')
365+
if len(wt_config)
366+
let worktree = FugitiveVimPath(matchstr(wt_config[0], '= *\zs.*'))
367+
elseif !exists('worktree')
368+
call filter(config,'v:val =~# "^\\s*bare *= *true *$"')
369+
if empty(config)
370+
let s:worktree_for_dir[dir] = 0
371+
endif
372+
endif
363373
endif
364374
if exists('worktree')
365375
let s:worktree_for_dir[dir] = s:Slash(resolve(worktree))

0 commit comments

Comments
 (0)