# HG changeset patch # User Christian Brabandt # Date 1524083407 -7200 # Node ID 5ef1e61705898c4891e56c60a549bdd506ead71d # Parent 81a4e59f7f83bb3fe8dd3edac10312576896bdf4 patch 8.0.1734: package directory not added to 'rtp' if prefix matches commit https://github.com/vim/vim/commit/f98a39ca57d001ba3e24831bae1e375790fb41f0 Author: Bram Moolenaar 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. diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c --- 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); diff --git a/src/testdir/test_packadd.vim b/src/testdir/test_packadd.vim --- 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:') diff --git a/src/version.c b/src/version.c --- 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,