mirror of
https://github.com/tpope/vim-fugitive.git
synced 2025-11-16 07:13:52 -05:00
Reorder status BufReadCmd
Put all the stuff that actually updates the buffer together, so we can soft reload without triggering autocommands or doing redundant work. The reason for the previous ordering was to allow a bit of parallelism while the diff commands ran in the background. Let's try to preserve that for map definitions by running them in parallel to the status command instead. I'm not sure why 'nomodifiable' was set after BufReadPost. Let's try the more natural ordering and see if anything breaks.
This commit is contained in:
@@ -2664,6 +2664,55 @@ let s:rebase_abbrevs = {
|
|||||||
\ 'b': 'break',
|
\ 'b': 'break',
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
|
function! s:MapStatus() abort
|
||||||
|
call fugitive#MapJumps()
|
||||||
|
call s:Map('n', '-', ":<C-U>execute <SID>Do('Toggle',0)<CR>", '<silent>')
|
||||||
|
call s:Map('x', '-', ":<C-U>execute <SID>Do('Toggle',1)<CR>", '<silent>')
|
||||||
|
call s:Map('n', 's', ":<C-U>execute <SID>Do('Stage',0)<CR>", '<silent>')
|
||||||
|
call s:Map('x', 's', ":<C-U>execute <SID>Do('Stage',1)<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'u', ":<C-U>execute <SID>Do('Unstage',0)<CR>", '<silent>')
|
||||||
|
call s:Map('x', 'u', ":<C-U>execute <SID>Do('Unstage',1)<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'U', ":<C-U>Git reset -q<CR>", '<silent>')
|
||||||
|
call s:MapMotion('gu', "exe <SID>StageJump(v:count, 'Untracked', 'Unstaged')")
|
||||||
|
call s:MapMotion('gU', "exe <SID>StageJump(v:count, 'Unstaged', 'Untracked')")
|
||||||
|
call s:MapMotion('gs', "exe <SID>StageJump(v:count, 'Staged')")
|
||||||
|
call s:MapMotion('gp', "exe <SID>StageJump(v:count, 'Unpushed')")
|
||||||
|
call s:MapMotion('gP', "exe <SID>StageJump(v:count, 'Unpulled')")
|
||||||
|
call s:MapMotion('gr', "exe <SID>StageJump(v:count, 'Rebasing')")
|
||||||
|
call s:Map('n', 'C', ":echoerr 'fugitive: C has been removed in favor of cc'<CR>", '<silent><unique>')
|
||||||
|
call s:Map('n', 'a', ":<C-U>execute <SID>Do('Toggle',0)<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'i', ":<C-U>execute <SID>NextExpandedHunk(v:count1)<CR>", '<silent>')
|
||||||
|
call s:Map('n', "=", ":<C-U>execute <SID>StageInline('toggle',line('.'),v:count)<CR>", '<silent>')
|
||||||
|
call s:Map('n', "<", ":<C-U>execute <SID>StageInline('hide', line('.'),v:count)<CR>", '<silent>')
|
||||||
|
call s:Map('n', ">", ":<C-U>execute <SID>StageInline('show', line('.'),v:count)<CR>", '<silent>')
|
||||||
|
call s:Map('x', "=", ":<C-U>execute <SID>StageInline('toggle',line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
|
||||||
|
call s:Map('x', "<", ":<C-U>execute <SID>StageInline('hide', line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
|
||||||
|
call s:Map('x', ">", ":<C-U>execute <SID>StageInline('show', line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'D', ":echoerr 'fugitive: D has been removed in favor of dd'<CR>", '<silent><unique>')
|
||||||
|
call s:Map('n', 'dd', ":<C-U>execute <SID>StageDiff('Gdiffsplit')<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'dh', ":<C-U>execute <SID>StageDiff('Ghdiffsplit')<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'ds', ":<C-U>execute <SID>StageDiff('Ghdiffsplit')<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'dp', ":<C-U>execute <SID>StageDiffEdit()<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'dv', ":<C-U>execute <SID>StageDiff('Gvdiffsplit')<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'd?', ":<C-U>help fugitive_d<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'P', ":<C-U>execute <SID>StagePatch(line('.'),line('.')+v:count1-1)<CR>", '<silent>')
|
||||||
|
call s:Map('x', 'P', ":<C-U>execute <SID>StagePatch(line(\"'<\"),line(\"'>\"))<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'p', ":<C-U>if v:count<Bar>silent exe <SID>GF('pedit')<Bar>else<Bar>echoerr 'Use = for inline diff, P for :Git add/reset --patch, 1p for :pedit'<Bar>endif<CR>", '<silent>')
|
||||||
|
call s:Map('x', 'p', ":<C-U>execute <SID>StagePatch(line(\"'<\"),line(\"'>\"))<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'I', ":<C-U>execute <SID>StagePatch(line('.'),line('.'))<CR>", '<silent>')
|
||||||
|
call s:Map('x', 'I', ":<C-U>execute <SID>StagePatch(line(\"'<\"),line(\"'>\"))<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'gq', ":<C-U>if bufnr('$') == 1<Bar>quit<Bar>else<Bar>bdelete<Bar>endif<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'R', ":echohl WarningMsg<Bar>echo 'Reloading is automatic. Use :e to force'<Bar>echohl NONE<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'g<Bar>', ":<C-U>echoerr 'Changed to X'<CR>", '<silent><unique>')
|
||||||
|
call s:Map('x', 'g<Bar>', ":<C-U>echoerr 'Changed to X'<CR>", '<silent><unique>')
|
||||||
|
call s:Map('n', 'X', ":<C-U>execute <SID>StageDelete(line('.'), 0, v:count)<CR>", '<silent>')
|
||||||
|
call s:Map('x', 'X', ":<C-U>execute <SID>StageDelete(line(\"'<\"), line(\"'>\"), v:count)<CR>", '<silent>')
|
||||||
|
call s:Map('n', 'gI', ":<C-U>execute <SID>StageIgnore(line('.'), line('.'), v:count)<CR>", '<silent>')
|
||||||
|
call s:Map('x', 'gI', ":<C-U>execute <SID>StageIgnore(line(\"'<\"), line(\"'>\"), v:count)<CR>", '<silent>')
|
||||||
|
call s:Map('n', '.', ':<C-U> <C-R>=<SID>StageArgs(0)<CR><Home>')
|
||||||
|
call s:Map('x', '.', ':<C-U> <C-R>=<SID>StageArgs(1)<CR><Home>')
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! fugitive#BufReadStatus(cmdbang) abort
|
function! fugitive#BufReadStatus(cmdbang) abort
|
||||||
let amatch = s:Slash(expand('%:p'))
|
let amatch = s:Slash(expand('%:p'))
|
||||||
if a:cmdbang
|
if a:cmdbang
|
||||||
@@ -2690,8 +2739,10 @@ function! fugitive#BufReadStatus(cmdbang) abort
|
|||||||
let status = fugitive#Execute(status_cmd, function('len'))
|
let status = fugitive#Execute(status_cmd, function('len'))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
doautocmd BufReadPre
|
doautocmd <nomodeline> BufReadPre
|
||||||
setlocal noreadonly modifiable nomodeline buftype=nowrite
|
|
||||||
|
setlocal readonly nomodifiable noswapfile nomodeline buftype=nowrite
|
||||||
|
call s:MapStatus()
|
||||||
|
|
||||||
let [staged, unstaged, untracked] = [[], [], []]
|
let [staged, unstaged, untracked] = [[], [], []]
|
||||||
let props = {}
|
let props = {}
|
||||||
@@ -2910,6 +2961,7 @@ function! fugitive#BufReadStatus(cmdbang) abort
|
|||||||
let expanded = get(b:, 'fugitive_expanded', {'Staged': {}, 'Unstaged': {}})
|
let expanded = get(b:, 'fugitive_expanded', {'Staged': {}, 'Unstaged': {}})
|
||||||
let b:fugitive_expanded = {'Staged': {}, 'Unstaged': {}}
|
let b:fugitive_expanded = {'Staged': {}, 'Unstaged': {}}
|
||||||
|
|
||||||
|
setlocal noreadonly modifiable
|
||||||
silent keepjumps %delete_
|
silent keepjumps %delete_
|
||||||
|
|
||||||
call s:AddHeader('Head', head)
|
call s:AddHeader('Head', head)
|
||||||
@@ -2959,63 +3011,7 @@ function! fugitive#BufReadStatus(cmdbang) abort
|
|||||||
call s:AddLogSection('Unpulled from ' . pull_short, s:QueryLogRange(head, pull_ref, dir))
|
call s:AddLogSection('Unpulled from ' . pull_short, s:QueryLogRange(head, pull_ref, dir))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
setlocal nomodified readonly noswapfile
|
setlocal nomodified readonly nomodifiable
|
||||||
doautocmd BufReadPost
|
|
||||||
setlocal nomodifiable
|
|
||||||
if &bufhidden ==# ''
|
|
||||||
setlocal bufhidden=delete
|
|
||||||
endif
|
|
||||||
if !exists('b:dispatch')
|
|
||||||
let b:dispatch = ':Git fetch --all'
|
|
||||||
endif
|
|
||||||
call fugitive#MapJumps()
|
|
||||||
call s:Map('n', '-', ":<C-U>execute <SID>Do('Toggle',0)<CR>", '<silent>')
|
|
||||||
call s:Map('x', '-', ":<C-U>execute <SID>Do('Toggle',1)<CR>", '<silent>')
|
|
||||||
call s:Map('n', 's', ":<C-U>execute <SID>Do('Stage',0)<CR>", '<silent>')
|
|
||||||
call s:Map('x', 's', ":<C-U>execute <SID>Do('Stage',1)<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'u', ":<C-U>execute <SID>Do('Unstage',0)<CR>", '<silent>')
|
|
||||||
call s:Map('x', 'u', ":<C-U>execute <SID>Do('Unstage',1)<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'U', ":<C-U>Git reset -q<CR>", '<silent>')
|
|
||||||
call s:MapMotion('gu', "exe <SID>StageJump(v:count, 'Untracked', 'Unstaged')")
|
|
||||||
call s:MapMotion('gU', "exe <SID>StageJump(v:count, 'Unstaged', 'Untracked')")
|
|
||||||
call s:MapMotion('gs', "exe <SID>StageJump(v:count, 'Staged')")
|
|
||||||
call s:MapMotion('gp', "exe <SID>StageJump(v:count, 'Unpushed')")
|
|
||||||
call s:MapMotion('gP', "exe <SID>StageJump(v:count, 'Unpulled')")
|
|
||||||
call s:MapMotion('gr', "exe <SID>StageJump(v:count, 'Rebasing')")
|
|
||||||
call s:Map('n', 'C', ":echoerr 'fugitive: C has been removed in favor of cc'<CR>", '<silent><unique>')
|
|
||||||
call s:Map('n', 'a', ":<C-U>execute <SID>Do('Toggle',0)<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'i', ":<C-U>execute <SID>NextExpandedHunk(v:count1)<CR>", '<silent>')
|
|
||||||
call s:Map('n', "=", ":<C-U>execute <SID>StageInline('toggle',line('.'),v:count)<CR>", '<silent>')
|
|
||||||
call s:Map('n', "<", ":<C-U>execute <SID>StageInline('hide', line('.'),v:count)<CR>", '<silent>')
|
|
||||||
call s:Map('n', ">", ":<C-U>execute <SID>StageInline('show', line('.'),v:count)<CR>", '<silent>')
|
|
||||||
call s:Map('x', "=", ":<C-U>execute <SID>StageInline('toggle',line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
|
|
||||||
call s:Map('x', "<", ":<C-U>execute <SID>StageInline('hide', line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
|
|
||||||
call s:Map('x', ">", ":<C-U>execute <SID>StageInline('show', line(\"'<\"),line(\"'>\")-line(\"'<\")+1)<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'D', ":echoerr 'fugitive: D has been removed in favor of dd'<CR>", '<silent><unique>')
|
|
||||||
call s:Map('n', 'dd', ":<C-U>execute <SID>StageDiff('Gdiffsplit')<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'dh', ":<C-U>execute <SID>StageDiff('Ghdiffsplit')<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'ds', ":<C-U>execute <SID>StageDiff('Ghdiffsplit')<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'dp', ":<C-U>execute <SID>StageDiffEdit()<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'dv', ":<C-U>execute <SID>StageDiff('Gvdiffsplit')<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'd?', ":<C-U>help fugitive_d<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'P', ":<C-U>execute <SID>StagePatch(line('.'),line('.')+v:count1-1)<CR>", '<silent>')
|
|
||||||
call s:Map('x', 'P', ":<C-U>execute <SID>StagePatch(line(\"'<\"),line(\"'>\"))<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'p', ":<C-U>if v:count<Bar>silent exe <SID>GF('pedit')<Bar>else<Bar>echoerr 'Use = for inline diff, P for :Git add/reset --patch, 1p for :pedit'<Bar>endif<CR>", '<silent>')
|
|
||||||
call s:Map('x', 'p', ":<C-U>execute <SID>StagePatch(line(\"'<\"),line(\"'>\"))<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'I', ":<C-U>execute <SID>StagePatch(line('.'),line('.'))<CR>", '<silent>')
|
|
||||||
call s:Map('x', 'I', ":<C-U>execute <SID>StagePatch(line(\"'<\"),line(\"'>\"))<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'gq', ":<C-U>if bufnr('$') == 1<Bar>quit<Bar>else<Bar>bdelete<Bar>endif<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'R', ":echohl WarningMsg<Bar>echo 'Reloading is automatic. Use :e to force'<Bar>echohl NONE<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'g<Bar>', ":<C-U>echoerr 'Changed to X'<CR>", '<silent><unique>')
|
|
||||||
call s:Map('x', 'g<Bar>', ":<C-U>echoerr 'Changed to X'<CR>", '<silent><unique>')
|
|
||||||
call s:Map('n', 'X', ":<C-U>execute <SID>StageDelete(line('.'), 0, v:count)<CR>", '<silent>')
|
|
||||||
call s:Map('x', 'X', ":<C-U>execute <SID>StageDelete(line(\"'<\"), line(\"'>\"), v:count)<CR>", '<silent>')
|
|
||||||
call s:Map('n', 'gI', ":<C-U>execute <SID>StageIgnore(line('.'), line('.'), v:count)<CR>", '<silent>')
|
|
||||||
call s:Map('x', 'gI', ":<C-U>execute <SID>StageIgnore(line(\"'<\"), line(\"'>\"), v:count)<CR>", '<silent>')
|
|
||||||
call s:Map('n', '.', ':<C-U> <C-R>=<SID>StageArgs(0)<CR><Home>')
|
|
||||||
call s:Map('x', '.', ':<C-U> <C-R>=<SID>StageArgs(1)<CR><Home>')
|
|
||||||
setlocal filetype=fugitive
|
|
||||||
|
|
||||||
for [lnum, section] in [[staged_end, 'Staged'], [unstaged_end, 'Unstaged']]
|
for [lnum, section] in [[staged_end, 'Staged'], [unstaged_end, 'Unstaged']]
|
||||||
while len(getline(lnum))
|
while len(getline(lnum))
|
||||||
let filename = matchstr(getline(lnum), '^[A-Z?] \zs.*')
|
let filename = matchstr(getline(lnum), '^[A-Z?] \zs.*')
|
||||||
@@ -3026,6 +3022,15 @@ function! fugitive#BufReadStatus(cmdbang) abort
|
|||||||
endwhile
|
endwhile
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
doautocmd <nomodeline> BufReadPost
|
||||||
|
if &bufhidden ==# ''
|
||||||
|
setlocal bufhidden=delete
|
||||||
|
endif
|
||||||
|
if !exists('b:dispatch')
|
||||||
|
let b:dispatch = ':Git fetch --all'
|
||||||
|
endif
|
||||||
|
setlocal filetype=fugitive
|
||||||
|
|
||||||
let b:fugitive_reltime = reltime()
|
let b:fugitive_reltime = reltime()
|
||||||
return s:DoAutocmd('User FugitiveIndex')
|
return s:DoAutocmd('User FugitiveIndex')
|
||||||
catch /^fugitive:/
|
catch /^fugitive:/
|
||||||
|
|||||||
Reference in New Issue
Block a user