From f4d94c598517fc72ec63f6dccc3b5752c63beff5 Mon Sep 17 00:00:00 2001 From: Tim Pope Date: Sun, 12 Dec 2021 13:29:58 -0500 Subject: [PATCH] Move CommonDir() from autoload to plugin --- autoload/fugitive.vim | 22 +--------------------- plugin/fugitive.vim | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim index 87d57c4..d27278d 100644 --- 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 index 038f275..7b6ce09 100644 --- 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