diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index 2b5fdd2..76d66c6 100644 --- a/autoload/fugitive.vim +++ b/autoload/fugitive.vim @@ -337,8 +337,8 @@ function! s:repo_translate(spec, ...) dict abort let f = dir . s:sub(rev, '^/=\.git', '') elseif empty(rev) || rev ==# '/.' return self.tree() - elseif rev =~# '^/' - let f = self.tree(rev) + elseif rev =~# '^\.\=/' + let f = self.tree(substitute(rev, '^\.', '', '')) elseif rev =~# '^:[0-3]:/\@!' let f = 'fugitive://' . dir . '//' . rev[1] . '/' . rev[3:-1] elseif rev ==# ':' @@ -532,8 +532,10 @@ function! fugitive#Path(url, ...) abort 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] + elseif s:cpath(url) ==# s:cpath(tree) + let file = '/' endif - if empty(file) && a:1 ==# '' + if empty(file) && a:1 =~# '^\%([.:]\=/\)\=$' return s:shellslash(fugitive#Real(a:url)) endif return substitute(file, '^/', a:1, '') diff --git a/doc/fugitive.txt b/doc/fugitive.txt index 3405a1a..944e20e 100644 --- a/doc/fugitive.txt +++ b/doc/fugitive.txt @@ -323,7 +323,7 @@ refs/heads/x .git/refs/heads/x @ The commit referenced by @ aka HEAD master^ The parent of the commit referenced by master master: The tree referenced by master -/master The file named master in the work tree +./master The file named master in the work tree Makefile The file named Makefile in the work tree @^:Makefile The file named Makefile in the parent of HEAD :Makefile The file named Makefile in the index (writable) @@ -335,7 +335,6 @@ Makefile The file named Makefile in the work tree :1 The current file's common ancestor during a conflict :2 The current file in the target branch during a conflict :3 The current file in the merged branch during a conflict -:/foo The most recent commit with "foo" in the message STATUSLINE *fugitive-statusline* diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim index afa41a8..32baf20 100644 --- a/plugin/fugitive.vim +++ b/plugin/fugitive.vim @@ -159,6 +159,9 @@ function! FugitivePath(...) abort endfunction function! FugitiveGenerate(...) abort + if a:0 && s:shellslash(a:0) =~# '^\%(\a\a\+:\)\=\%(a:\)\=/\|^[~$]' + return a:1 + endif return fugitive#repo(a:0 > 1 ? a:2 : get(b:, 'git_dir', '')).translate(a:0 ? a:1 : '', 1) endfunction