commit f4d94c598517fc72ec63f6dccc3b5752c63beff5 (tree)
parent bb4f9e660b0934f70af693c56c5b8a4c322e7a1f
Author: Tim Pope <code@tpope.net>
Date: Sun, 12 Dec 2021 13:29:58 -0500
Move CommonDir() from autoload to plugin
Diffstat:
2 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim
@@ -474,26 +474,6 @@ function! fugitive#GitVersion(...) abort
return a:000[i] ==# get(components, i)
endfunction
-let s:commondirs = {}
-function! fugitive#CommonDir(dir) abort
- if empty(a:dir)
- return ''
- endif
- if !has_key(s:commondirs, a:dir)
- if filereadable(a:dir . '/commondir') && getfsize(a:dir . '/HEAD') >= 10
- let cdir = get(readfile(a:dir . '/commondir', '', 1), 0, '')
- if cdir =~# '^/\|^\a:/'
- let s:commondirs[a:dir] = s:Slash(FugitiveVimPath(cdir))
- else
- let s:commondirs[a:dir] = simplify(a:dir . '/' . cdir)
- endif
- else
- let s:commondirs[a:dir] = a:dir
- endif
- endif
- return s:commondirs[a:dir]
-endfunction
-
function! s:Dir(...) abort
return a:0 ? FugitiveGitDir(a:1) : FugitiveGitDir()
endfunction
@@ -1748,7 +1728,7 @@ function! fugitive#Find(object, ...) abort
elseif rev =~# '^\.git/'
let f = strpart(rev, 5)
let fdir = dir . '/'
- let cdir = fugitive#CommonDir(dir) . '/'
+ let cdir = FugitiveCommonDir(dir) . '/'
if f =~# '^\.\./\.\.\%(/\|$\)'
let f = simplify(len(tree) ? tree . f[2:-1] : fdir . f)
elseif f =~# '^\.\.\%(/\|$\)'
diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim
@@ -282,12 +282,28 @@ function! FugitiveStatusline(...) abort
return fugitive#Statusline()
endfunction
+let s:commondirs = {}
function! FugitiveCommonDir(...) abort
let dir = FugitiveGitDir(a:0 ? a:1 : -1)
if empty(dir)
return ''
endif
- return fugitive#Find('.git/refs/..', dir)
+ if has_key(s:commondirs, dir)
+ return s:commondirs[dir]
+ endif
+ if getfsize(dir . '/HEAD') >= 10
+ let cdir = get(s:ReadFile(dir . '/commondir', 1), 0, '')
+ if cdir =~# '^/\|^\a:/'
+ let s:commondirs[dir] = s:Slash(FugitiveVimPath(cdir))
+ elseif len(cdir)
+ let s:commondirs[dir] = simplify(dir . '/' . cdir)
+ else
+ let s:commondirs[dir] = dir
+ endif
+ else
+ let s:commondirs[dir] = dir
+ endif
+ return s:commondirs[dir]
endfunction
function! FugitiveWorkTree(...) abort