DRY up refs/ paths

This commit is contained in:
Tim Pope
2016-02-24 15:53:51 -05:00
parent 9835920a3c
commit 1e3f1103d9

View File

@@ -299,6 +299,7 @@ function! s:repo_bare() dict abort
endfunction endfunction
function! s:repo_translate(spec) dict abort function! s:repo_translate(spec) dict abort
let refs = self.dir('refs/')
if a:spec ==# '.' || a:spec ==# '/.' if a:spec ==# '.' || a:spec ==# '/.'
return self.bare() ? self.dir() : self.tree() return self.bare() ? self.dir() : self.tree()
elseif a:spec =~# '^/\=\.git$' && self.bare() elseif a:spec =~# '^/\=\.git$' && self.bare()
@@ -322,18 +323,18 @@ function! s:repo_translate(spec) dict abort
return 'fugitive://'.self.dir().'//0/'.a:spec[1:-1] return 'fugitive://'.self.dir().'//0/'.a:spec[1:-1]
elseif a:spec ==# '@' elseif a:spec ==# '@'
return self.dir('HEAD') return self.dir('HEAD')
elseif a:spec =~# 'HEAD\|^refs/' && a:spec !~ ':' && filereadable(self.dir(a:spec)) elseif a:spec =~# 'HEAD\|^refs/' && a:spec !~ ':' && filereadable(refs . '../' . a:spec)
return self.dir(a:spec) return simplify(refs . '../' . a:spec)
elseif filereadable(self.dir('refs/'.a:spec)) elseif filereadable(refs.a:spec)
return self.dir('refs/'.a:spec) return refs.a:spec
elseif filereadable(self.dir('refs/tags/'.a:spec)) elseif filereadable(refs.'tags/'.a:spec)
return self.dir('refs/tags/'.a:spec) return refs.'tags/'.a:spec
elseif filereadable(self.dir('refs/heads/'.a:spec)) elseif filereadable(refs.'heads/'.a:spec)
return self.dir('refs/heads/'.a:spec) return refs.'heads/'.a:spec
elseif filereadable(self.dir('refs/remotes/'.a:spec)) elseif filereadable(refs.'remotes/'.a:spec)
return self.dir('refs/remotes/'.a:spec) return refs.'remotes/'.a:spec
elseif filereadable(self.dir('refs/remotes/'.a:spec.'/HEAD')) elseif filereadable(refs.'remotes/'.a:spec.'/HEAD')
return self.dir('refs/remotes/'.a:spec,'/HEAD') return refs.'remotes/'.a:spec,'/HEAD'
else else
try try
let ref = self.rev_parse(matchstr(a:spec,'[^:]*')) let ref = self.rev_parse(matchstr(a:spec,'[^:]*'))