# HG changeset patch # User Christian Brabandt # Date 1457271904 -3600 # Node ID 1a6527cce6754f65854aeb0d8a942084a05719b7 # Parent e4cd8ab5610dfd63d6b058158b6275e662c2490d commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0 Author: Bram Moolenaar Date: Sun Mar 6 14:44:08 2016 +0100 patch 7.4.1499 Problem: No error message when :packadd does not find anything. Solution: Add an error message. (Hirohito Higashi) diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt --- a/runtime/doc/repeat.txt +++ b/runtime/doc/repeat.txt @@ -213,7 +213,7 @@ For writing a Vim script, see chapter 41 about each searched file. {not in Vi} - *:pa* *:packadd* + *:pa* *:packadd* *E919* :pa[ckadd][!] {name} Search for an optional plugin directory in 'packpath' and source any plugin files found. The directory must match: diff --git a/src/ex_cmds.h b/src/ex_cmds.h --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -1012,7 +1012,7 @@ EX(CMD_print, "print", ex_print, RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|SBOXOK, ADDR_LINES), EX(CMD_packadd, "packadd", ex_packadd, - BANG|FILE1|TRLBAR|SBOXOK|CMDWIN, + BANG|FILE1|NEEDARG|TRLBAR|SBOXOK|CMDWIN, ADDR_LINES), EX(CMD_pclose, "pclose", ex_pclose, BANG|TRLBAR, diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -2918,8 +2918,7 @@ source_callback(char_u *fname, void *coo /* * Source the file "name" from all directories in 'runtimepath'. * "name" can contain wildcards. - * When "flags" has DIP_ALL: source all files, otherwise only the first one. - * When "flags" has DIP_DIR: find directories instead of files. + * When "all" is TRUE: source all files, otherwise only the first one. * * return FAIL when no file could be sourced, OK otherwise. */ @@ -2931,7 +2930,18 @@ source_runtime(char_u *name, int all) #define DIP_ALL 1 /* all matches, not just the first one */ #define DIP_DIR 2 /* find directories instead of files. */ - +#define DIP_ERR 4 /* give an error message when none found. */ + +/* + * Find the file "name" in all directories in "path" and invoke + * "callback(fname, cookie)". + * "name" can contain wildcards. + * When "flags" has DIP_ALL: source all files, otherwise only the first one. + * When "flags" has DIP_DIR: find directories instead of files. + * When "flags" has DIP_ERR: give an error message if there is no match. + * + * return FAIL when no file could be sourced, OK otherwise. + */ static int do_in_path( char_u *path, @@ -3022,11 +3032,18 @@ do_in_path( } vim_free(buf); vim_free(rtp_copy); - if (p_verbose > 0 && !did_one && name != NULL) + if (!did_one && name != NULL) { - verbose_enter(); - smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name); - verbose_leave(); + char *basepath = path == p_rtp ? "runtimepath" : "packpath"; + + if (flags & DIP_ERR) + EMSG3(_(e_dirnotf), basepath, name); + else if (p_verbose > 0) + { + verbose_enter(); + smsg((char_u *)_("not found in '%s': \"%s\""), basepath, name); + verbose_leave(); + } } #ifdef AMIGA @@ -3178,8 +3195,8 @@ theend: void source_packages() { - do_in_path(p_pp, (char_u *)"pack/*/ever/*", - DIP_ALL + DIP_DIR, add_pack_plugin, p_pp); + do_in_path(p_pp, (char_u *)"pack/*/ever/*", DIP_ALL + DIP_DIR, + add_pack_plugin, p_pp); } /* @@ -3197,8 +3214,8 @@ ex_packadd(exarg_T *eap) if (pat == NULL) return; vim_snprintf(pat, len, plugpat, eap->arg); - do_in_path(p_pp, (char_u *)pat, DIP_ALL + DIP_DIR, add_pack_plugin, - eap->forceit ? NULL : p_pp); + do_in_path(p_pp, (char_u *)pat, DIP_ALL + DIP_DIR + DIP_ERR, + add_pack_plugin, eap->forceit ? NULL : p_pp); vim_free(pat); } diff --git a/src/globals.h b/src/globals.h --- a/src/globals.h +++ b/src/globals.h @@ -1577,6 +1577,7 @@ EXTERN char_u e_notset[] INIT(= N_("E764 #ifndef FEAT_CLIPBOARD EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name")); #endif +EXTERN char_u e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\"")); #ifdef MACOS_X_UNIX EXTERN short disallow_gui INIT(= FALSE); 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 @@ -31,6 +31,10 @@ func Test_packadd() call assert_equal(17, g:ftdetect_works) call assert_true(len(&rtp) > len(rtp)) call assert_true(&rtp =~ 'testdir/Xdir/pack/mine/opt/mytest\($\|,\)') + + " Check exception + call assert_fails("packadd directorynotfound", 'E919:') + call assert_fails("packadd", 'E471:') endfunc func Test_packadd_noload() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -744,6 +744,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1499, +/**/ 1498, /**/ 1497,