From 79fa8caa6ed3baf16dbc3c8a3e9e475bc3a44cb2 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Fri, 22 Feb 2013 12:45:03 +0100 Subject: [PATCH] Push diff filtering down to shell. This should make things a little more efficient on the basis of minimising the amount of data flowing up. --- plugin/gitgutter.vim | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/plugin/gitgutter.vim b/plugin/gitgutter.vim index cc00771..472f5fe 100644 --- a/plugin/gitgutter.vim +++ b/plugin/gitgutter.vim @@ -68,7 +68,8 @@ endfunction " Diff processing {{{ function! s:run_diff() - let cmd = 'git diff --no-ext-diff -U0 ' . shellescape(s:current_file()) + let cmd = 'git diff --no-ext-diff -U0 ' . shellescape(s:current_file()) . + \ ' | grep -e "^@@ "' let diff = system(s:command_in_directory_of_current_file(cmd)) return diff endfunction @@ -77,14 +78,12 @@ function! s:parse_diff(diff) let hunk_re = '^@@ -\(\d\+\),\?\(\d*\) +\(\d\+\),\?\(\d*\) @@' let hunks = [] for line in split(a:diff, '\n') - if line =~ '^@@\s' - let matches = matchlist(line, hunk_re) - let from_line = str2nr(matches[1]) - let from_count = (matches[2] == '') ? 1 : str2nr(matches[2]) - let to_line = str2nr(matches[3]) - let to_count = (matches[4] == '') ? 1 : str2nr(matches[4]) - call add(hunks, [from_line, from_count, to_line, to_count]) - endif + let matches = matchlist(line, hunk_re) + let from_line = str2nr(matches[1]) + let from_count = (matches[2] == '') ? 1 : str2nr(matches[2]) + let to_line = str2nr(matches[3]) + let to_count = (matches[4] == '') ? 1 : str2nr(matches[4]) + call add(hunks, [from_line, from_count, to_line, to_count]) endfor return hunks endfunction