mirror of
https://github.com/tpope/vim-fugitive.git
synced 2025-11-14 14:23:51 -05:00
Support .git/.. to refer to work tree
This commit is contained in:
@@ -521,18 +521,24 @@ function! fugitive#Route(object, ...) abort
|
|||||||
return fnamemodify(len(file) ? file : a:object, ':p')
|
return fnamemodify(len(file) ? file : a:object, ':p')
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let rev = a:object
|
let rev = s:Slash(a:object)
|
||||||
let tree = s:Tree(dir)
|
let tree = s:Tree(dir)
|
||||||
let base = len(tree) ? tree : 'fugitive://' . dir . '//0'
|
let base = len(tree) ? tree : 'fugitive://' . dir . '//0'
|
||||||
if rev =~# '^\%(\./\)\=\.git$' && empty(tree)
|
if rev ==# '.git'
|
||||||
let f = dir
|
let f = len(tree) ? tree . '/.git' : dir
|
||||||
elseif rev =~# '^\%(\./\)\=\.git/'
|
elseif rev =~# '^\.git/'
|
||||||
let f = substitute(rev, '\C^\%(\./\)\=\.git', '', '')
|
let f = substitute(rev, '^\.git', '', '')
|
||||||
let cdir = fugitive#CommonDir(dir)
|
let cdir = fugitive#CommonDir(dir)
|
||||||
if cdir !=# dir && (f =~# '^/\%(config\|info\|hooks\|objects\|refs\|worktrees\)' || !filereadable(f) && filereadable(cdir . f))
|
if f =~# '^/\.\./\.\.\%(/\|$\)'
|
||||||
let f = cdir . f
|
let f = simplify(len(tree) ? tree . f[3:-1] : dir . f)
|
||||||
|
elseif f =~# '^/\.\.\%(/\|$\)'
|
||||||
|
let f = base . f[3:-1]
|
||||||
|
elseif cdir !=# dir && (
|
||||||
|
\ f =~# '^/\%(config\|hooks\|info\|logs/refs\|objects\|refs\|worktrees\)\%(/\|$\)' ||
|
||||||
|
\ f !~# '^/logs$\|/\w*HEAD$' && getftime(dir . f) < 0 && getftime(cdir . f) >= 0)
|
||||||
|
let f = simplify(cdir . f)
|
||||||
else
|
else
|
||||||
let f = dir . f
|
let f = simplify(dir . f)
|
||||||
endif
|
endif
|
||||||
elseif rev ==# ':/'
|
elseif rev ==# ':/'
|
||||||
let f = base
|
let f = base
|
||||||
|
|||||||
Reference in New Issue
Block a user