commit 10121f34f29afb28c3e1d3ac3df34026fe992f21 (tree)
parent f2956a923d40fde2d7b4212c04c70f0ab16dc7ff
Author: Tim Pope <code@tpope.net>
Date: Sat, 13 Mar 2021 23:27:28 -0500
Remove Git dir checks on FileType events
In order for these checks to work, :filetype on must be invoked *after*
Fugitive is loaded. Otherwise, the FileType event triggers before
FugitiveDetect() is called.
These file types are used almost exclusively inside of Git repositories,
and in the rare case they are not, we're not doing anything particularly
intrusive, so dropping the conditional should have little practical
impact. An exception is fugitive#MapJumps(), which is designed to be
used exclusively with historical buffers, the status buffer, and
captured :Git output, so let's lock it down to those particular
workflows.
Diffstat:
2 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/autoload/fugitive.vim b/autoload/fugitive.vim
@@ -2273,7 +2273,10 @@ function! s:TempReadPost(file) abort
if has_key(s:temp_files, s:cpath(a:file))
let dict = s:temp_files[s:cpath(a:file)]
setlocal nobuflisted
- if has_key(dict, 'filetype') && dict.filetype !=# &l:filetype
+ if get(dict, 'filetype', '') ==# 'git'
+ call fugitive#MapJumps()
+ endif
+ if has_key(dict, 'filetype')
let &l:filetype = dict.filetype
endif
setlocal foldmarker=<<<<<<<,>>>>>>>
@@ -6117,6 +6120,9 @@ endfunction
function! s:StatusCfile(...) abort
let tree = s:Tree()
+ if empty(tree)
+ return ['']
+ endif
let lead = s:cpath(tree, getcwd()) ? './' : tree . '/'
let info = s:StageInfo()
let line = getline('.')
@@ -6146,6 +6152,9 @@ endfunction
function! s:MessageCfile(...) abort
let tree = s:Tree()
+ if empty(tree)
+ return ''
+ endif
let lead = s:cpath(tree, getcwd()) ? './' : tree . '/'
if getline('.') =~# '^.\=\trenamed:.* -> '
return lead . matchstr(getline('.'),' -> \zs.*')
@@ -6172,6 +6181,9 @@ function! fugitive#MessageCfile() abort
endfunction
function! s:cfile() abort
+ if empty(FugitiveGitDir())
+ return []
+ endif
try
let myhash = s:DirRev(@%)[1]
if len(myhash)
diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim
@@ -363,27 +363,20 @@ augroup fugitive
autocmd FileType netrw call FugitiveDetect(fnamemodify(get(b:, 'netrw_curdir', expand('<amatch>')), ':p'))
autocmd FileType git
- \ if len(FugitiveGitDir()) |
- \ call fugitive#MapJumps() |
- \ call fugitive#MapCfile() |
- \ endif
+ \ call fugitive#MapCfile()
autocmd FileType gitcommit
- \ if len(FugitiveGitDir()) |
- \ call fugitive#MapCfile('fugitive#MessageCfile()') |
- \ endif
+ \ call fugitive#MapCfile('fugitive#MessageCfile()')
autocmd FileType git,gitcommit
- \ if len(FugitiveGitDir()) && &foldtext ==# 'foldtext()' |
+ \ if &foldtext ==# 'foldtext()' |
\ setlocal foldtext=fugitive#Foldtext() |
\ endif
autocmd FileType fugitive
- \ if len(FugitiveGitDir()) |
- \ call fugitive#MapCfile('fugitive#StatusCfile()') |
- \ endif
+ \ call fugitive#MapCfile('fugitive#StatusCfile()')
autocmd FileType gitrebase
\ let &l:include = '^\%(pick\|squash\|edit\|reword\|fixup\|drop\|[pserfd]\)\>' |
- \ if len(FugitiveGitDir()) |
- \ let &l:includeexpr = 'v:fname =~# ''^\x\{4,\}$'' ? FugitiveFind(v:fname) : ' .
- \ (len(&l:includeexpr) ? &l:includeexpr : 'v:fname') |
+ \ if &l:includeexpr !~# 'Fugitive' |
+ \ let &l:includeexpr = 'v:fname =~# ''^\x\{4,\}$'' && len(FugitiveGitDir()) ? FugitiveFind(v:fname) : ' .
+ \ (len(&l:includeexpr) ? &l:includeexpr : 'v:fname') |
\ endif |
\ let b:undo_ftplugin = get(b:, 'undo_ftplugin', 'exe') . '|setl inex= inc='