changeset 13724:5ef1e6170589 v8.0.1734

patch 8.0.1734: package directory not added to 'rtp' if prefix matches commit https://github.com/vim/vim/commit/f98a39ca57d001ba3e24831bae1e375790fb41f0 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Apr 18 22:18:23 2018 +0200 patch 8.0.1734: package directory not added to 'rtp' if prefix matches Problem: Package directory not added to 'rtp' if prefix matches. Solution: Check the match is a full match. (Ozaki Kiichi, closes https://github.com/vim/vim/issues/2817) Also handle different ways of spelling a path.
author Christian Brabandt <cb@256bit.org>
date Wed, 18 Apr 2018 22:30:07 +0200
parents 81a4e59f7f83
children 25ffa5f27874
files src/ex_cmds2.c src/testdir/test_packadd.vim src/version.c
diffstat 3 files changed, 34 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3821,10 +3821,30 @@ static int APP_BOTH;
     static void
 add_pack_plugin(char_u *fname, void *cookie)
 {
-    if (cookie != &APP_LOAD && strstr((char *)p_rtp, (char *)fname) == NULL)
-	/* directory is not yet in 'runtimepath', add it */
-	if (add_pack_dir_to_rtp(fname) == FAIL)
+    if (cookie != &APP_LOAD)
+    {
+	char_u	*buf = alloc(MAXPATHL);
+	char_u	*p;
+	int	found = FALSE;
+
+	if (buf == NULL)
 	    return;
+	p = p_rtp;
+	while (*p != NUL)
+	{
+	    copy_option_part(&p, buf, MAXPATHL, ",");
+	    if (pathcmp((char *)buf, (char *)fname, -1) == 0)
+	    {
+		found = TRUE;
+		break;
+	    }
+	}
+	vim_free(buf);
+	if (!found)
+	    /* directory is not yet in 'runtimepath', add it */
+	    if (add_pack_dir_to_rtp(fname) == FAIL)
+		return;
+    }
 
     if (cookie != &APP_ADD_DIR)
 	load_pack_plugin(fname);
--- a/src/testdir/test_packadd.vim
+++ b/src/testdir/test_packadd.vim
@@ -40,6 +40,15 @@ func Test_packadd()
   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')
+  let rtp = &rtp
+  packadd myte
+
+  " Check the path of 'myte' is added
+  call assert_true(len(&rtp) > len(rtp))
+  call assert_match('/testdir/Xdir/pack/mine/opt/myte\($\|,\)', &rtp)
+
   " Check exception
   call assert_fails("packadd directorynotfound", 'E919:')
   call assert_fails("packadd", 'E471:')
--- a/src/version.c
+++ b/src/version.c
@@ -763,6 +763,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1734,
+/**/
     1733,
 /**/
     1732,