summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0353
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0353')
-rw-r--r--data/vim/patches/8.1.0353283
1 files changed, 283 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0353 b/data/vim/patches/8.1.0353
new file mode 100644
index 000000000..842e839c8
--- /dev/null
+++ b/data/vim/patches/8.1.0353
@@ -0,0 +1,283 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0353
+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.0353
+Problem: An "after" directory of a package is appended to 'rtp', which
+ will be after the user's "after" directory. ()
+Solution: Insert the package "after" directory before any other "after"
+ directory in 'rtp'. (closes #3409)
+Files: src/ex_cmds2.c, src/testdir/test_packadd.vim
+
+
+*** ../vim-8.1.0352/src/ex_cmds2.c 2018-08-31 23:06:18.735841246 +0200
+--- src/ex_cmds2.c 2018-09-08 18:03:22.848808156 +0200
+***************
+*** 3691,3704 ****
+ add_pack_dir_to_rtp(char_u *fname)
+ {
+ char_u *p4, *p3, *p2, *p1, *p;
+! char_u *insp;
+ int c;
+ char_u *new_rtp;
+ int keep;
+ size_t oldlen;
+ size_t addlen;
+ char_u *afterdir = NULL;
+ size_t afterlen = 0;
+ char_u *ffname = NULL;
+ size_t fname_len;
+ char_u *buf = NULL;
+--- 3691,3707 ----
+ add_pack_dir_to_rtp(char_u *fname)
+ {
+ char_u *p4, *p3, *p2, *p1, *p;
+! char_u *entry;
+! char_u *insp = NULL;
+ int c;
+ char_u *new_rtp;
+ int keep;
+ size_t oldlen;
+ size_t addlen;
++ size_t new_rtp_len;
+ char_u *afterdir = NULL;
+ size_t afterlen = 0;
++ char_u *after_insp = NULL;
+ char_u *ffname = NULL;
+ size_t fname_len;
+ char_u *buf = NULL;
+***************
+*** 3725,3778 ****
+ if (ffname == NULL)
+ return FAIL;
+
+! /* Find "ffname" in "p_rtp", ignoring '/' vs '\' differences. */
+ fname_len = STRLEN(ffname);
+- insp = p_rtp;
+ buf = alloc(MAXPATHL);
+ if (buf == NULL)
+ goto theend;
+! while (*insp != NUL)
+ {
+! copy_option_part(&insp, buf, MAXPATHL, ",");
+! add_pathsep(buf);
+! rtp_ffname = fix_fname(buf);
+! if (rtp_ffname == NULL)
+! goto theend;
+! match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0;
+! vim_free(rtp_ffname);
+! if (match)
+ break;
+ }
+
+! if (*insp == NUL)
+! /* not found, append at the end */
+ insp = p_rtp + STRLEN(p_rtp);
+- else
+- /* append after the matching directory. */
+- --insp;
+
+! /* check if rtp/pack/name/start/name/after exists */
+ afterdir = concat_fnames(fname, (char_u *)"after", TRUE);
+ if (afterdir != NULL && mch_isdir(afterdir))
+! afterlen = STRLEN(afterdir) + 1; /* add one for comma */
+
+ oldlen = STRLEN(p_rtp);
+! addlen = STRLEN(fname) + 1; /* add one for comma */
+! new_rtp = alloc((int)(oldlen + addlen + afterlen + 1));
+! /* add one for NUL */
+ if (new_rtp == NULL)
+ goto theend;
+ keep = (int)(insp - p_rtp);
+ mch_memmove(new_rtp, p_rtp, keep);
+! new_rtp[keep] = ',';
+! mch_memmove(new_rtp + keep + 1, fname, addlen);
+ if (p_rtp[keep] != NUL)
+! mch_memmove(new_rtp + keep + addlen, p_rtp + keep, oldlen - keep + 1);
+! if (afterlen > 0)
+ {
+ STRCAT(new_rtp, ",");
+ STRCAT(new_rtp, afterdir);
+ }
+ set_option_value((char_u *)"rtp", 0L, new_rtp, 0);
+ vim_free(new_rtp);
+ retval = OK;
+--- 3728,3826 ----
+ if (ffname == NULL)
+ return FAIL;
+
+! // Find "ffname" in "p_rtp", ignoring '/' vs '\' differences.
+! // Also stop at the first "after" directory.
+ fname_len = STRLEN(ffname);
+ buf = alloc(MAXPATHL);
+ if (buf == NULL)
+ goto theend;
+! for (entry = p_rtp; *entry != NUL; )
+ {
+! char_u *cur_entry = entry;
+!
+! copy_option_part(&entry, buf, MAXPATHL, ",");
+! if (insp == NULL)
+! {
+! add_pathsep(buf);
+! rtp_ffname = fix_fname(buf);
+! if (rtp_ffname == NULL)
+! goto theend;
+! match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0;
+! vim_free(rtp_ffname);
+! if (match)
+! // Insert "ffname" after this entry (and comma).
+! insp = entry;
+! }
+!
+! if ((p = (char_u *)strstr((char *)buf, "after")) != NULL
+! && p > buf
+! && vim_ispathsep(p[-1])
+! && (vim_ispathsep(p[5]) || p[5] == NUL || p[5] == ','))
+! {
+! if (insp == NULL)
+! // Did not find "ffname" before the first "after" directory,
+! // insert it before this entry.
+! insp = cur_entry;
+! after_insp = cur_entry;
+ break;
++ }
+ }
+
+! if (insp == NULL)
+! // Both "fname" and "after" not found, append at the end.
+ insp = p_rtp + STRLEN(p_rtp);
+
+! // check if rtp/pack/name/start/name/after exists
+ afterdir = concat_fnames(fname, (char_u *)"after", TRUE);
+ if (afterdir != NULL && mch_isdir(afterdir))
+! afterlen = STRLEN(afterdir) + 1; // add one for comma
+
+ oldlen = STRLEN(p_rtp);
+! addlen = STRLEN(fname) + 1; // add one for comma
+! new_rtp = alloc((int)(oldlen + addlen + afterlen + 1)); // add one for NUL
+ if (new_rtp == NULL)
+ goto theend;
++
++ // We now have 'rtp' parts: {keep}{keep_after}{rest}.
++ // Create new_rtp, first: {keep},{fname}
+ keep = (int)(insp - p_rtp);
+ mch_memmove(new_rtp, p_rtp, keep);
+! new_rtp_len = keep;
+! if (*insp == NUL)
+! new_rtp[new_rtp_len++] = ','; // add comma before
+! mch_memmove(new_rtp + new_rtp_len, fname, addlen - 1);
+! new_rtp_len += addlen - 1;
+! if (*insp != NUL)
+! new_rtp[new_rtp_len++] = ','; // add comma after
+!
+! if (afterlen > 0 && after_insp != NULL)
+! {
+! int keep_after = (int)(after_insp - p_rtp);
+!
+! // Add to new_rtp: {keep},{fname}{keep_after},{afterdir}
+! mch_memmove(new_rtp + new_rtp_len, p_rtp + keep,
+! keep_after - keep);
+! new_rtp_len += keep_after - keep;
+! mch_memmove(new_rtp + new_rtp_len, afterdir, afterlen - 1);
+! new_rtp_len += afterlen - 1;
+! new_rtp[new_rtp_len++] = ',';
+! keep = keep_after;
+! }
+!
+ if (p_rtp[keep] != NUL)
+! // Append rest: {keep},{fname}{keep_after},{afterdir}{rest}
+! mch_memmove(new_rtp + new_rtp_len, p_rtp + keep, oldlen - keep + 1);
+! else
+! new_rtp[new_rtp_len] = NUL;
+!
+! if (afterlen > 0 && after_insp == NULL)
+ {
++ // Append afterdir when "after" was not found:
++ // {keep},{fname}{rest},{afterdir}
+ STRCAT(new_rtp, ",");
+ STRCAT(new_rtp, afterdir);
+ }
++
+ set_option_value((char_u *)"rtp", 0L, new_rtp, 0);
+ vim_free(new_rtp);
+ retval = OK;
+*** ../vim-8.1.0352/src/testdir/test_packadd.vim 2018-04-18 21:56:13.000000000 +0200
+--- src/testdir/test_packadd.vim 2018-09-08 18:16:43.969062182 +0200
+***************
+*** 12,17 ****
+--- 12,22 ----
+ endfunc
+
+ func Test_packadd()
++ if !exists('s:plugdir')
++ echomsg 'when running this test manually, call SetUp() first'
++ return
++ endif
++
+ call mkdir(s:plugdir . '/plugin/also', 'p')
+ call mkdir(s:plugdir . '/ftdetect', 'p')
+ call mkdir(s:plugdir . '/after', 'p')
+***************
+*** 19,24 ****
+--- 24,37 ----
+ let rtp = &rtp
+ filetype on
+
++ let rtp_entries = split(rtp, ',')
++ for entry in rtp_entries
++ if entry =~? '\<after\>'
++ let first_after_entry = entry
++ break
++ endif
++ endfor
++
+ exe 'split ' . s:plugdir . '/plugin/test.vim'
+ call setline(1, 'let g:plugin_works = 42')
+ wq
+***************
+*** 38,44 ****
+ call assert_equal(17, g:ftdetect_works)
+ call assert_true(len(&rtp) > len(rtp))
+ call assert_match('/testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp)
+! call assert_match('/testdir/Xdir/pack/mine/opt/mytest/after$', &rtp)
+
+ " NOTE: '/.../opt/myte' forwardly matches with '/.../opt/mytest'
+ call mkdir(fnamemodify(s:plugdir, ':h') . '/myte', 'p')
+--- 51,62 ----
+ call assert_equal(17, g:ftdetect_works)
+ call assert_true(len(&rtp) > len(rtp))
+ call assert_match('/testdir/Xdir/pack/mine/opt/mytest\($\|,\)', &rtp)
+!
+! let new_after = match(&rtp, '/testdir/Xdir/pack/mine/opt/mytest/after,')
+! let old_after = match(&rtp, ',' . first_after_entry . '\>')
+! call assert_true(new_after > 0, 'rtp is ' . &rtp)
+! call assert_true(old_after > 0, 'rtp is ' . &rtp)
+! call assert_true(new_after < old_after, 'rtp is ' . &rtp)
+
+ " NOTE: '/.../opt/myte' forwardly matches with '/.../opt/mytest'
+ call mkdir(fnamemodify(s:plugdir, ':h') . '/myte', 'p')
+*** ../vim-8.1.0352/src/version.c 2018-09-08 15:10:14.405097082 +0200
+--- src/version.c 2018-09-08 17:01:12.259798047 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 353,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+14. Put mosquito netting around your work area. Play a tape of jungle
+ sounds all day.
+
+ /// 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 ///