Avoid unnecessary diff when adding/staging/reverting hunks.

This commit is contained in:
Andy Stewart
2016-02-08 15:45:48 +00:00
parent 7ef03a7b43
commit f0e2cb5b4a
2 changed files with 15 additions and 13 deletions

View File

@@ -183,13 +183,14 @@ function! gitgutter#stage_hunk()
if gitgutter#utility#is_active() if gitgutter#utility#is_active()
" Ensure the working copy of the file is up to date. " Ensure the working copy of the file is up to date.
" It doesn't make sense to stage a hunk otherwise. " It doesn't make sense to stage a hunk otherwise.
" This also updates the signs and hunks. noautocmd silent write
silent write let diff = gitgutter#diff#run_diff(0, 1)
call gitgutter#handle_diff(diff)
if empty(gitgutter#hunk#current_hunk()) if empty(gitgutter#hunk#current_hunk())
call gitgutter#utility#warn('cursor is not in a hunk') call gitgutter#utility#warn('cursor is not in a hunk')
else else
let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('stage') let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk(diff, 'stage')
call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --cached --unidiff-zero - '), diff_for_hunk) call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --cached --unidiff-zero - '), diff_for_hunk)
" refresh gitgutter's view of buffer " refresh gitgutter's view of buffer
@@ -204,13 +205,14 @@ function! gitgutter#revert_hunk()
if gitgutter#utility#is_active() if gitgutter#utility#is_active()
" Ensure the working copy of the file is up to date. " Ensure the working copy of the file is up to date.
" It doesn't make sense to stage a hunk otherwise. " It doesn't make sense to stage a hunk otherwise.
" This also updates the signs and hunks. noautocmd silent write
silent write let diff = gitgutter#diff#run_diff(0, 1)
call gitgutter#handle_diff(diff)
if empty(gitgutter#hunk#current_hunk()) if empty(gitgutter#hunk#current_hunk())
call gitgutter#utility#warn('cursor is not in a hunk') call gitgutter#utility#warn('cursor is not in a hunk')
else else
let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('revert') let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk(diff, 'revert')
call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --reverse --unidiff-zero - '), diff_for_hunk) call gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file('git apply --reverse --unidiff-zero - '), diff_for_hunk)
" reload file " reload file
@@ -225,13 +227,14 @@ function! gitgutter#preview_hunk()
if gitgutter#utility#is_active() if gitgutter#utility#is_active()
" Ensure the working copy of the file is up to date. " Ensure the working copy of the file is up to date.
" It doesn't make sense to stage a hunk otherwise. " It doesn't make sense to stage a hunk otherwise.
" This also updates the signs and hunks. noautocmd silent write
silent write let diff = gitgutter#diff#run_diff(0, 1)
call gitgutter#handle_diff(diff)
if empty(gitgutter#hunk#current_hunk()) if empty(gitgutter#hunk#current_hunk())
call gitgutter#utility#warn('cursor is not in a hunk') call gitgutter#utility#warn('cursor is not in a hunk')
else else
let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk('preview') let diff_for_hunk = gitgutter#diff#generate_diff_for_hunk(diff, 'preview')
silent! wincmd P silent! wincmd P
if !&previewwindow if !&previewwindow

View File

@@ -286,11 +286,10 @@ endfunction
" Generates a zero-context diff for the current hunk. " Generates a zero-context diff for the current hunk.
" "
" diff - the full diff for the buffer
" type - stage | revert | preview " type - stage | revert | preview
function! gitgutter#diff#generate_diff_for_hunk(type) function! gitgutter#diff#generate_diff_for_hunk(diff, type)
" Run a fresh diff. let diff_for_hunk = gitgutter#diff#discard_hunks(a:diff, a:type == 'stage' || a:type == 'revert')
let diff = gitgutter#diff#run_diff(0, 1)
let diff_for_hunk = gitgutter#diff#discard_hunks(diff, a:type == 'stage' || a:type == 'revert')
if a:type == 'stage' || a:type == 'revert' if a:type == 'stage' || a:type == 'revert'
let diff_for_hunk = gitgutter#diff#adjust_hunk_summary(diff_for_hunk, a:type == 'stage') let diff_for_hunk = gitgutter#diff#adjust_hunk_summary(diff_for_hunk, a:type == 'stage')