From 270613bd71628b51583e6bf33eec52423820b0b9 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Wed, 27 Feb 2013 10:34:07 +0100 Subject: [PATCH] Ignore diff results which aren't actually hunks. Some people have reported a failure whereby at least one `line` in the diff results doesn't match the hunk regexp. I believe, though cannot say with certainty, that this is due to mismatching newline shenanigans. However this theory doesn't explain how the failure could occur on a file without changes, as reported by one person. Furthermore I think that the hunk results would have to have double \n characters to cause this failure, which I don't think would ordinarily occur on Windows or Unix. Whatever the reason, this change copes with the situation. --- plugin/gitgutter.vim | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/plugin/gitgutter.vim b/plugin/gitgutter.vim index f30b6d5..abf8d81 100644 --- a/plugin/gitgutter.vim +++ b/plugin/gitgutter.vim @@ -89,12 +89,14 @@ function! s:parse_diff(diff) let hunk_re = '^@@ -\(\d\+\),\?\(\d*\) +\(\d\+\),\?\(\d*\) @@' let hunks = [] for line in split(a:diff, '\n') - 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]) + let matches = matchlist(line, hunk_re) + if len(matches) > 0 + 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]) + end endfor return hunks endfunction