summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-03-06 14:44:08 +0100
committerBram Moolenaar <Bram@vim.org>2016-03-06 14:44:08 +0100
commitbe82c254862e475a582c0717455e1db6bf96b0d0 (patch)
tree11dfa9bbaf41ce597a37afb20bbd7f1bcb3eb7d6
parent2588b5a43f049ddf542991050260237051caad77 (diff)
patch 7.4.1499v7.4.1499
Problem: No error message when :packadd does not find anything. Solution: Add an error message. (Hirohito Higashi)
-rw-r--r--runtime/doc/repeat.txt2
-rw-r--r--src/ex_cmds.h2
-rw-r--r--src/ex_cmds2.c37
-rw-r--r--src/globals.h1
-rw-r--r--src/testdir/test_packadd.vim4
-rw-r--r--src/version.c2
6 files changed, 36 insertions, 12 deletions
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index d5d78638ae..1b9e54fcb3 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -213,7 +213,7 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
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
index 24f83aade4..c25ee2ee65 100644
--- 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
index b6992b2bb9..7a0d0bd94b 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2918,8 +2918,7 @@ source_callback(char_u *fname, void *cookie UNUSED)
/*
* 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
index 6fd86fba56..bd9ef5c877 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1577,6 +1577,7 @@ EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set"));
#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
index 091fec24b2..a0a270149b 100644
--- 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
index 1bcccd8646..6ce39932ad 100644
--- 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,