commit 07d30de8be50deaa4bd1e02a2d92cd049db203c2 (tree)
parent c693da9cb0046a545d2b43ad7d508c9f930df6e5
Author: Tim Pope <code@tpope.net>
Date: Sun, 22 Jul 2018 19:15:22 -0400
Return relative paths with second argument to FugitivePath()
Diffstat:
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim
@@ -533,8 +533,25 @@ function! fugitive#Real(url) abort
return ''
endfunction
-function! fugitive#Path(url) abort
- return fugitive#Real(a:url)
+function! fugitive#Path(url, ...) abort
+ if !a:0
+ return fugitive#Real(a:url)
+ endif
+ let url = fnamemodify(a:url, ':p')
+ let dir = a:0 > 1 ? a:2 : get(b:, 'git_dir', '')
+ let tree = FugitiveTreeForGitDir(dir)
+ let [argdir, commit, file] = s:DirCommitFile(a:url)
+ if len(argdir) && s:cpath(argdir) !=# s:cpath(dir)
+ let file = ''
+ elseif len(dir) && s:cpath(url[0 : len(dir)]) ==# s:cpath(dir . '/')
+ let file = '/.git'.url[strlen(dir) : -1]
+ elseif len(tree) && s:cpath(url[0 : len(tree)]) ==# s:cpath(tree . '/')
+ let file = url[len(tree) : -1]
+ endif
+ if empty(file) && a:1 ==# ''
+ return s:shellslash(fugitive#Real(a:url))
+ endif
+ return substitute(file, '^/', a:1, '')
endfunction
let s:trees = {}
@@ -840,7 +857,7 @@ function! s:buffer_relative(...) dict abort
endfunction
function! s:Relative(prefix) abort
- return s:buffer().relative(a:prefix)
+ return fugitive#Path(@%, a:prefix)
endfunction
function! s:buffer_path(...) dict abort