diff options
author | zeertzjq <zeertzjq@outlook.com> | 2025-01-16 09:16:25 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-16 01:16:25 +0000 |
commit | 718e16536052c0e75de61a32ef237a9e87fc03f2 (patch) | |
tree | cecd930e599260b75d87d508f721e2c6c7663cbd /src | |
parent | 524be56042335db589b9fe62dfdae39be3f69a15 (diff) | |
download | rneovim-718e16536052c0e75de61a32ef237a9e87fc03f2.tar.gz rneovim-718e16536052c0e75de61a32ef237a9e87fc03f2.tar.bz2 rneovim-718e16536052c0e75de61a32ef237a9e87fc03f2.zip |
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
https://github.com/vim/vim/commit/01f6509fb2de1627cc4ec2c109cd0aa2e3346d50
Co-authored-by: Yukihiro Nakadaira <yukihiro.nakadaira@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/diff.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c index bd98a31a71..99f70793b3 100644 --- a/src/nvim/diff.c +++ b/src/nvim/diff.c @@ -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; } |