@@ -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