aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatolii Sakhnik <sakhnik@gmail.com>2018-12-09 20:05:53 +0200
committerAnatolii Sakhnik <sakhnik@gmail.com>2018-12-09 20:05:53 +0200
commit8f20c22e10c35075afd97bf6af50fb6d9a2dc710 (patch)
tree536a00582583dfa77cb4ac90fbdb8761dbe951fe
parente104228b1c89022f0b284753ff92deb2e9374c5b (diff)
downloadrneovim-8f20c22e10c35075afd97bf6af50fb6d9a2dc710.tar.gz
rneovim-8f20c22e10c35075afd97bf6af50fb6d9a2dc710.tar.bz2
rneovim-8f20c22e10c35075afd97bf6af50fb6d9a2dc710.zip
vim-patch:8.1.0497: :%diffput changes order of lines
Problem: :%diffput changes order of lines. (Markus Braun) Solution: Do adjust marks when using internal diff. https://github.com/vim/vim/commit/5f57bdcab77bc417ae0357fe8ad6c7259b6d25df
-rw-r--r--src/nvim/diff.c4
-rw-r--r--src/nvim/testdir/test_diffmode.vim20
2 files changed, 22 insertions, 2 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 57bfc8db69..2bb73f63ba 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -271,9 +271,9 @@ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1,
// Will update diffs before redrawing. Set _invalid to update the
// diffs themselves, set _update to also update folds properly just
// before redrawing.
+ // Do update marks here, it is needed for :%diffput.
tp->tp_diff_invalid = true;
tp->tp_diff_update = true;
- return;
}
int inserted;
@@ -2742,7 +2742,7 @@ theend:
ex_diffupdate(NULL);
}
- // Check that the cursor is on a valid character and update it's
+ // Check that the cursor is on a valid character and update its
// position. When there were filler lines the topline has become
// invalid.
check_cursor();
diff --git a/src/nvim/testdir/test_diffmode.vim b/src/nvim/testdir/test_diffmode.vim
index f34c2fd26d..ad3eec3274 100644
--- a/src/nvim/testdir/test_diffmode.vim
+++ b/src/nvim/testdir/test_diffmode.vim
@@ -219,6 +219,26 @@ func Test_diffget_diffput()
%bwipe!
endfunc
+" Test putting two changes from one buffer to another
+func Test_diffput_two()
+ new a
+ let win_a = win_getid()
+ call setline(1, range(1, 10))
+ diffthis
+ new b
+ let win_b = win_getid()
+ call setline(1, range(1, 10))
+ 8del
+ 5del
+ diffthis
+ call win_gotoid(win_a)
+ %diffput
+ call win_gotoid(win_b)
+ call assert_equal(map(range(1, 10), 'string(v:val)'), getline(1, '$'))
+ bwipe! a
+ bwipe! b
+endfunc
+
func Test_dp_do_buffer()
e! one
let bn1=bufnr('%')