diff options
Diffstat (limited to 'data/vim/patches/8.1.0120')
-rw-r--r-- | data/vim/patches/8.1.0120 | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0120 b/data/vim/patches/8.1.0120 new file mode 100644 index 000000000..d16fae336 --- /dev/null +++ b/data/vim/patches/8.1.0120 @@ -0,0 +1,217 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0120 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0120 +Problem: Buffer 'modified' set even when :sort has no changes. +Solution: Only set 'modified' when lines are moved. (Jason Franklin) +Files: src/ex_cmds.c, src/testdir/test_sort.vim + + +*** ../vim-8.1.0119/src/ex_cmds.c 2018-06-24 23:53:25.149526513 +0200 +--- src/ex_cmds.c 2018-06-28 11:22:44.383108832 +0200 +*************** +*** 398,403 **** +--- 398,404 ---- + colnr_T end_col; + int sort_what = 0; + int format_found = 0; ++ int change_occurred = FALSE; // Buffer contents changed. + + /* Sorting one line is really quick! */ + if (count <= 1) +*************** +*** 616,627 **** + lnum = eap->line2; + for (i = 0; i < count; ++i) + { +! s = ml_get(nrs[eap->forceit ? count - i - 1 : i].lnum); + if (!unique || i == 0 + || (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0) + { +! /* Copy the line into a buffer, it may become invalid in +! * ml_append(). And it's needed for "unique". */ + STRCPY(sortbuf1, s); + if (ml_append(lnum++, sortbuf1, (colnr_T)0, FALSE) == FAIL) + break; +--- 617,635 ---- + lnum = eap->line2; + for (i = 0; i < count; ++i) + { +! linenr_T get_lnum = nrs[eap->forceit ? count - i - 1 : i].lnum; +! +! // If the original line number of the line being placed is not the same +! // as "lnum" (accounting for offset), we know that the buffer changed. +! if (get_lnum + ((linenr_T)count - 1) != lnum) +! change_occurred = TRUE; +! +! s = ml_get(get_lnum); + if (!unique || i == 0 + || (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0) + { +! // Copy the line into a buffer, it may become invalid in +! // ml_append(). And it's needed for "unique". + STRCPY(sortbuf1, s); + if (ml_append(lnum++, sortbuf1, (colnr_T)0, FALSE) == FAIL) + break; +*************** +*** 644,650 **** + mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted); + else if (deleted < 0) + mark_adjust(eap->line2, MAXLNUM, -deleted, 0L); +! changed_lines(eap->line1, 0, eap->line2 + 1, -deleted); + + curwin->w_cursor.lnum = eap->line1; + beginline(BL_WHITE | BL_FIX); +--- 652,660 ---- + mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted); + else if (deleted < 0) + mark_adjust(eap->line2, MAXLNUM, -deleted, 0L); +! +! if (change_occurred || deleted != 0) +! changed_lines(eap->line1, 0, eap->line2 + 1, -deleted); + + curwin->w_cursor.lnum = eap->line1; + beginline(BL_WHITE | BL_FIX); +*** ../vim-8.1.0119/src/testdir/test_sort.vim 2017-09-23 18:58:18.000000000 +0200 +--- src/testdir/test_sort.vim 2018-06-28 11:21:15.071564844 +0200 +*************** +*** 1,13 **** +! " Test sort() + +! :func Compare1(a, b) abort + call sort(range(3), 'Compare2') + return a:a - a:b +! :endfunc + +! :func Compare2(a, b) abort + return a:a - a:b +! :endfunc + + func Test_sort_strings() + " numbers compared as strings +--- 1,13 ---- +! " Tests for the "sort()" function and for the ":sort" command. + +! func Compare1(a, b) abort + call sort(range(3), 'Compare2') + return a:a - a:b +! endfunc + +! func Compare2(a, b) abort + return a:a - a:b +! endfunc + + func Test_sort_strings() + " numbers compared as strings +*************** +*** 45,51 **** + call assert_fails('call sort([3.3, 1, "2"], 3)', "E474") + endfunc + +! " Tests for the :sort command + func Test_sort_cmd() + let tests = [ + \ { +--- 45,51 ---- + call assert_fails('call sort([3.3, 1, "2"], 3)', "E474") + endfunc + +! " Tests for the ":sort" command. + func Test_sort_cmd() + let tests = [ + \ { +*************** +*** 1167,1181 **** + \ '1.234', + \ '123.456' + \ ] +! \ } + \ ] + + for t in tests + enew! + call append(0, t.input) + $delete _ +! exe t.cmd + call assert_equal(t.expected, getline(1, '$'), t.name) + endfor + + call assert_fails('sort no', 'E474') +--- 1167,1220 ---- + \ '1.234', + \ '123.456' + \ ] +! \ }, +! \ { +! \ 'name' : 'alphabetical, sorted input', +! \ 'cmd' : 'sort', +! \ 'input' : [ +! \ 'a', +! \ 'b', +! \ 'c', +! \ ], +! \ 'expected' : [ +! \ 'a', +! \ 'b', +! \ 'c', +! \ ] +! \ }, +! \ { +! \ 'name' : 'alphabetical, sorted input, unique at end', +! \ 'cmd' : 'sort u', +! \ 'input' : [ +! \ 'aa', +! \ 'bb', +! \ 'cc', +! \ 'cc', +! \ ], +! \ 'expected' : [ +! \ 'aa', +! \ 'bb', +! \ 'cc', +! \ ] +! \ }, + \ ] + + for t in tests + enew! + call append(0, t.input) + $delete _ +! setlocal nomodified +! execute t.cmd +! + call assert_equal(t.expected, getline(1, '$'), t.name) ++ ++ " Previously, the ":sort" command would set 'modified' even if the buffer ++ " contents did not change. Here, we check that this problem is fixed. ++ if t.input == t.expected ++ call assert_false(&modified, t.name . ': &mod is not correct') ++ else ++ call assert_true(&modified, t.name . ': &mod is not correct') ++ endif + endfor + + call assert_fails('sort no', 'E474') +*** ../vim-8.1.0119/src/version.c 2018-06-27 23:12:30.608811033 +0200 +--- src/version.c 2018-06-28 11:09:56.954947638 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 120, + /**/ + +-- +You cannot have a baby in one month by getting nine women pregnant. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |