From 320b7a33e78b22c05d25186fbeea853201627635 Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Mon, 14 Oct 2019 09:57:46 +0100 Subject: [PATCH] Fix preview and undo hunk for dos line endings --- autoload/gitgutter/hunk.vim | 4 ++-- test/fixture_dos.txt | 10 +++++++++ test/test_gitgutter.vim | 42 +++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 test/fixture_dos.txt diff --git a/autoload/gitgutter/hunk.vim b/autoload/gitgutter/hunk.vim index ffde78b..c51dd7a 100644 --- a/autoload/gitgutter/hunk.vim +++ b/autoload/gitgutter/hunk.vim @@ -278,7 +278,7 @@ endfunction function! s:undo(hunk_diff) " Apply reverse patch to buffer. let hunk = gitgutter#diff#parse_hunk(split(a:hunk_diff, '\n')[4]) - let lines = map(split(a:hunk_diff, '\n')[5:], 'v:val[1:]') + let lines = map(split(a:hunk_diff, '\r\?\n')[5:], 'v:val[1:]') let lnum = hunk[2] let added_only = hunk[1] == 0 && hunk[3] > 0 let removed_only = hunk[1] > 0 && hunk[3] == 0 @@ -295,7 +295,7 @@ endfunction function! s:preview(hunk_diff) - let lines = split(a:hunk_diff, '\n') + let lines = split(a:hunk_diff, '\r\?\n') let header = lines[0:4] let body = lines[5:] diff --git a/test/fixture_dos.txt b/test/fixture_dos.txt new file mode 100644 index 0000000..7744377 --- /dev/null +++ b/test/fixture_dos.txt @@ -0,0 +1,10 @@ +a +b +c +d +e +f +g +h +i +j diff --git a/test/test_gitgutter.vim b/test/test_gitgutter.vim index 502f989..c9f6b46 100644 --- a/test/test_gitgutter.vim +++ b/test/test_gitgutter.vim @@ -55,6 +55,7 @@ function SetUp() call system("git init ".s:test_repo. \ " && cd ".s:test_repo. \ " && cp ../fixture.txt .". + \ " && cp ../fixture_dos.txt .". \ " && git add . && git commit -m 'initial'". \ " && git config diff.mnemonicPrefix false") execute ':cd' s:test_repo @@ -349,6 +350,34 @@ function Test_hunk_outside_noop() endfunction +function Test_preview_foo() + normal 5Gi* + GitGutterPreviewHunk + + wincmd P + call assert_equal(2, line('$')) + call assert_equal('-e', getline(1)) + call assert_equal('+*e', getline(2)) + wincmd p +endfunction + + +function Test_preview_dos_foo() + edit! fixture_dos.txt + + normal 5Gi* + GitGutterPreviewHunk + + wincmd P + call assert_equal(2, line('$')) + call assert_equal('-e', getline(1)) + call assert_equal('+*e', getline(2)) + wincmd p +endfunction + + + + function Test_hunk_stage() let _shell = &shell set shell=foo @@ -657,6 +686,19 @@ function Test_hunk_undo() endfunction +function Test_hunk_undo_dos() + edit! fixture_dos.txt + + normal 5Gi* + GitGutterUndoHunk + + call s:assert_signs([], 'fixture_dos.txt') + call assert_equal([], s:git_diff()) + call assert_equal([], s:git_diff_staged()) + call assert_equal('e', getline(5)) +endfunction + + function Test_undo_nearby_hunk() execute "normal! 2Gox\y\z" normal 2jdd