Permalink
Browse files

patch 8.0.1398: :packadd does not load packages from the "start" dire…

…ctory

Problem:    :packadd does not load packages from the "start" directory.
            (Alejandro Hernandez)
Solution:   Make :packadd look in the "start" directory if those packages were
            not loaded on startup.
  • Loading branch information...
brammool committed Dec 17, 2017
1 parent 890dd05 commit 9e1d399e63903c6f84d7888ad8d84ebf4e29d8a1
Showing with 42 additions and 9 deletions.
  1. +22 −9 src/ex_cmds2.c
  2. +18 −0 src/testdir/test_packadd.vim
  3. +2 −0 src/version.c
View
@@ -3747,18 +3747,31 @@ ex_packloadall(exarg_T *eap)
void
ex_packadd(exarg_T *eap)
{
static char *plugpat = "pack/*/opt/%s";
static char *plugpat = "pack/*/%s/%s";
int len;
char *pat;
int round;
int res = OK;
len = (int)STRLEN(plugpat) + (int)STRLEN(eap->arg);
pat = (char *)alloc(len);
if (pat == NULL)
return;
vim_snprintf(pat, len, plugpat, eap->arg);
do_in_path(p_pp, (char_u *)pat, DIP_ALL + DIP_DIR + DIP_ERR,
add_pack_plugin, eap->forceit ? &APP_ADD_DIR : &APP_BOTH);
vim_free(pat);
/* Round 1: use "start", round 2: use "opt". */
for (round = 1; round <= 2; ++round)
{
/* Only look under "start" when loading packages wasn't done yet. */
if (round == 1 && did_source_packages)
continue;
len = (int)STRLEN(plugpat) + (int)STRLEN(eap->arg) + 5;
pat = (char *)alloc(len);
if (pat == NULL)
return;
vim_snprintf(pat, len, plugpat, round == 1 ? "start" : "opt", eap->arg);
/* The first round don't give a "not found" error, in the second round
* only when nothing was found in the first round. */
res = do_in_path(p_pp, (char_u *)pat,
DIP_ALL + DIP_DIR + (round == 2 && res == FAIL ? DIP_ERR : 0),
add_pack_plugin, eap->forceit ? &APP_ADD_DIR : &APP_BOTH);
vim_free(pat);
}
}
#if defined(FEAT_EVAL) && defined(FEAT_AUTOCMD)
@@ -45,6 +45,24 @@ func Test_packadd()
call assert_fails("packadd", 'E471:')
endfunc
func Test_packadd_start()
let plugdir = s:topdir . '/pack/mine/start/other'
call mkdir(plugdir . '/plugin', 'p')
set rtp&
let rtp = &rtp
filetype on
exe 'split ' . plugdir . '/plugin/test.vim'
call setline(1, 'let g:plugin_works = 24')
wq
packadd other
call assert_equal(24, g:plugin_works)
call assert_true(len(&rtp) > len(rtp))
call assert_true(&rtp =~ '/testdir/Xdir/pack/mine/start/other\($\|,\)')
endfunc
func Test_packadd_noload()
call mkdir(s:plugdir . '/plugin', 'p')
call mkdir(s:plugdir . '/syntax', 'p')
View
@@ -771,6 +771,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1398,
/**/
1397,
/**/

0 comments on commit 9e1d399

Please sign in to comment.