aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2018-12-29 01:15:59 -0500
committerJames McCoy <jamessan@jamessan.com>2018-12-29 12:57:16 -0500
commit91f40ff2841c4f3af524010145ee54d6d048ce07 (patch)
treed61ea59a69b63103179f41a2a796cc8518a5603f
parente09fb6ee534bf02535e4458cb6eb24aefb3aab24 (diff)
downloadrneovim-91f40ff2841c4f3af524010145ee54d6d048ce07.tar.gz
rneovim-91f40ff2841c4f3af524010145ee54d6d048ce07.tar.bz2
rneovim-91f40ff2841c4f3af524010145ee54d6d048ce07.zip
vim-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 vim/vim#2817) Also handle different ways of spelling a path. https://github.com/vim/vim/commit/f98a39ca57d001ba3e24831bae1e375790fb41f0
-rw-r--r--src/nvim/ex_cmds2.c22
-rw-r--r--test/functional/legacy/packadd_spec.lua9
2 files changed, 27 insertions, 4 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 4e3fc86539..f46e4108f4 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -2683,10 +2683,24 @@ 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) {
- return;
+ if (cookie != &APP_LOAD) {
+ char *buf = xmalloc(MAXPATHL);
+ bool found = false;
+
+ const char *p = (const char *)p_rtp;
+ while (*p != NUL) {
+ copy_option_part((char_u **)&p, (char_u *)buf, MAXPATHL, ",");
+ if (path_fnamecmp(buf, (char *)fname) == 0) {
+ found = true;
+ break;
+ }
+ }
+ xfree(buf);
+ if (!found) {
+ // directory is not yet in 'runtimepath', add it
+ if (add_pack_dir_to_rtp(fname) == FAIL) {
+ return;
+ }
}
}
diff --git a/test/functional/legacy/packadd_spec.lua b/test/functional/legacy/packadd_spec.lua
index a73beef0cd..ca3757ad3c 100644
--- a/test/functional/legacy/packadd_spec.lua
+++ b/test/functional/legacy/packadd_spec.lua
@@ -57,6 +57,15 @@ describe('packadd', function()
call assert_match(Escape(s:plugdir) . '\($\|,\)', &rtp)
call assert_match(Escape(expand(s:plugdir . '/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(Escape(s:plugdir) . '\($\|,\)', &rtp)
+
" Check exception
call assert_fails("packadd directorynotfound", 'E919:')
call assert_fails("packadd", 'E471:')