Skip to content

Commit

Permalink
Move logic out of main plugin file.
Browse files Browse the repository at this point in the history
  • Loading branch information
airblade committed Mar 17, 2014
1 parent eee8ba4 commit 9c66906
Show file tree
Hide file tree
Showing 2 changed files with 176 additions and 179 deletions.
155 changes: 155 additions & 0 deletions autoload/gitgutter.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
" Primary functions {{{

function! gitgutter#all()
for buffer_id in tabpagebuflist()
let file = expand('#' . buffer_id . ':p')
if !empty(file)
call gitgutter#process_buffer(file, 0)
endif
endfor
endfunction

" file: (string) the file to process.
" realtime: (boolean) when truthy, do a realtime diff; otherwise do a disk-based diff.
function! gitgutter#process_buffer(file, realtime)
call utility#set_file(a:file)
if utility#is_active()
if g:gitgutter_sign_column_always
call sign#add_dummy_sign()
endif
try
if !a:realtime || utility#has_fresh_changes(a:file)
let diff = diff#run_diff(a:realtime || utility#has_unsaved_changes(a:file), 1)
call hunk#set_hunks(diff#parse_diff(diff))
let modified_lines = diff#process_hunks(hunk#hunks())

if g:gitgutter_signs
call sign#update_signs(a:file, modified_lines)
endif

call utility#save_last_seen_change(a:file)
endif
catch /diff failed/
call hunk#reset()
endtry
else
call hunk#reset()
endif
endfunction

function! gitgutter#disable()
let g:gitgutter_enabled = 0
call sign#clear_signs(utility#file())
call sign#remove_dummy_sign(1)
call hunk#reset()
endfunction

function! gitgutter#enable()
let g:gitgutter_enabled = 1
call gitgutter#process_buffer(utility#current_file(), 0)
endfunction

function! gitgutter#toggle()
if g:gitgutter_enabled
call gitgutter#disable()
else
call gitgutter#enable()
endif
endfunction

" }}}

" Line highlights {{{

function! gitgutter#line_highlights_disable()
let g:gitgutter_highlight_lines = 0
call highlight#define_sign_line_highlights()
redraw!
endfunction

function! gitgutter#line_highlights_enable()
let g:gitgutter_highlight_lines = 1
call highlight#define_sign_line_highlights()
redraw!
endfunction

function! gitgutter#line_highlights_toggle()
let g:gitgutter_highlight_lines = !g:gitgutter_highlight_lines
call highlight#define_sign_line_highlights()
redraw!
endfunction

" }}}

" Signs {{{

function! gitgutter#signs_enable()
let g:gitgutter_signs = 1
call gitgutter#all()
endfunction

function! gitgutter#signs_disable()
let g:gitgutter_signs = 0
call sign#clear_signs(utility#file())
call sign#remove_dummy_sign(0)
endfunction

function! gitgutter#signs_toggle()
if g:gitgutter_signs
call gitgutter#signs_disable()
else
call gitgutter#signs_enable()
endif
endfunction

" }}}

" Hunks {{{

function! gitgutter#stage_hunk()
if utility#is_active()
" Ensure the working copy of the file is up to date.
" It doesn't make sense to stage a hunk otherwise.
silent write

" find current hunk
let current_hunk = hunk#current_hunk()
if empty(current_hunk)
return
endif

" construct a diff
let diff_for_hunk = diff#generate_diff_for_hunk(current_hunk)

" apply the diff
call system(utility#command_in_directory_of_file('git apply --cached --unidiff-zero - '), diff_for_hunk)

" refresh gitgutter's view of buffer
silent execute "GitGutter"
endif
endfunction

function! gitgutter#revert_hunk()
if utility#is_active()
" Ensure the working copy of the file is up to date.
" It doesn't make sense to stage a hunk otherwise.
silent write

" find current hunk
let current_hunk = hunk#current_hunk()
if empty(current_hunk)
return
endif

" construct a diff
let diff_for_hunk = diff#generate_diff_for_hunk(current_hunk)

" apply the diff
call system(utility#command_in_directory_of_file('git apply --reverse --unidiff-zero - '), diff_for_hunk)

" reload file
silent edit
endif
endfunction

" }}}
Loading

0 comments on commit 9c66906

Please sign in to comment.