changeset 8416:1a6527cce675 v7.4.1499

commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0 Author: Bram Moolenaar <Bram@vim.org> 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)
author Christian Brabandt <cb@256bit.org>
date Sun, 06 Mar 2016 14:45:04 +0100
parents e4cd8ab5610d
children c7d9934d09e3
files runtime/doc/repeat.txt src/ex_cmds.h src/ex_cmds2.c src/globals.h src/testdir/test_packadd.vim src/version.c
diffstat 6 files changed, 37 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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:
--- 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,
--- 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);
 }
 
--- 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);
--- 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()
--- 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,