mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:9.1.1018: v9.1.0743 causes regression with diff mode (#32047)
Problem: v9.1.0743 causes regression with diff mode
Solution: Fix the regression with overlapping regions
closes: vim/vim#16454
01f6509fb2
Co-authored-by: Yukihiro Nakadaira <yukihiro.nakadaira@gmail.com>
This commit is contained in:
parent
524be56042
commit
718e165360
@ -1622,6 +1622,11 @@ static void process_hunk(diff_T **dpp, diff_T **dprevp, int idx_orig, int idx_ne
|
||||
} else {
|
||||
// second overlap of new block with existing block
|
||||
dp->df_count[idx_new] += (linenr_T)hunk->count_new;
|
||||
if ((dp->df_lnum[idx_new] + dp->df_count[idx_new] - 1)
|
||||
> curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count) {
|
||||
dp->df_count[idx_new] = curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count
|
||||
- dp->df_lnum[idx_new] + 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Adjust the size of the block to include all the lines to the
|
||||
@ -1632,6 +1637,11 @@ static void process_hunk(diff_T **dpp, diff_T **dprevp, int idx_orig, int idx_ne
|
||||
if (off < 0) {
|
||||
// new change ends in existing block, adjust the end
|
||||
dp->df_count[idx_new] += -off;
|
||||
if ((dp->df_lnum[idx_new] + dp->df_count[idx_new] - 1)
|
||||
> curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count) {
|
||||
dp->df_count[idx_new] = curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count
|
||||
- dp->df_lnum[idx_new] + 1;
|
||||
}
|
||||
off = 0;
|
||||
}
|
||||
|
||||
|
@ -2044,6 +2044,26 @@ it('diff mode overlapped diff blocks will be merged', function()
|
||||
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
||||
|
|
||||
]])
|
||||
|
||||
WriteDiffFiles3('a\nb\nc', 'd\ne', 'b\nf')
|
||||
screen:expect([[
|
||||
{7: }{27:a}{4: }│{7: }{27:d}{4: }│{7: }{27:^b}{4: }|
|
||||
{7: }{27:b}{4: }│{7: }{27:e}{4: }│{7: }{27:f}{4: }|
|
||||
{7: }{22:c }│{7: }{23:---------}│{7: }{23:---------}|
|
||||
{1:~ }│{1:~ }│{1:~ }|*15
|
||||
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
||||
|
|
||||
]])
|
||||
|
||||
WriteDiffFiles3('a\nb\nc', 'd\ne', 'b')
|
||||
screen:expect([[
|
||||
{7: }{27:a}{4: }│{7: }{27:d}{4: }│{7: }{27:^b}{4: }|
|
||||
{7: }{27:b}{4: }│{7: }{27:e}{4: }│{7: }{23:---------}|
|
||||
{7: }{22:c }│{7: }{23:---------}│{7: }{23:---------}|
|
||||
{1:~ }│{1:~ }│{1:~ }|*15
|
||||
{2:Xdifile1 Xdifile2 }{3:Xdifile3 }|
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
-- oldtest: Test_diff_topline_noscroll()
|
||||
|
@ -2004,6 +2004,12 @@ func Test_diff_overlapped_diff_blocks_will_be_merged()
|
||||
call WriteDiffFiles3(buf, ["a", "b", "c"], ["a", "x", "c"], ["a", "b", "y", "c"])
|
||||
call VerifyBoth(buf, "Test_diff_overlapped_3.37", "")
|
||||
|
||||
call WriteDiffFiles3(buf, ["a", "b", "c"], ["d", "e"], ["b", "f"])
|
||||
call VerifyBoth(buf, "Test_diff_overlapped_3.38", "")
|
||||
|
||||
call WriteDiffFiles3(buf, ["a", "b", "c"], ["d", "e"], ["b"])
|
||||
call VerifyBoth(buf, "Test_diff_overlapped_3.39", "")
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user