]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1499 v7.4.1499
authorBram Moolenaar <Bram@vim.org>
Sun, 6 Mar 2016 13:44:08 +0000 (14:44 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 6 Mar 2016 13:44:08 +0000 (14:44 +0100)
Problem:    No error message when :packadd does not find anything.
Solution:   Add an error message. (Hirohito Higashi)

runtime/doc/repeat.txt
src/ex_cmds.h
src/ex_cmds2.c
src/globals.h
src/testdir/test_packadd.vim
src/version.c

index d5d78638ae22227a8990b915f300ffa1a78c8a8f..1b9e54fcb32573560b3f6222d1f6e50195453a59 100644 (file)
@@ -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:
index 24f83aade42826becb935396e04e868b24ea8f57..c25ee2ee65b221de65972daf59062ae98ae7a61a 100644 (file)
@@ -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,
index b6992b2bb91b46301c3c3cc2975c49c12e5cbe90..7a0d0bd94b19fcdd4518f4676467edb3644f9a8e 100644 (file)
@@ -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);
 }
 
index 6fd86fba5622c195f53bc91e4f7dc8c83efe2218..bd9ef5c877ede93ea9d8bb5ccdf5cd8c5e0881d0 100644 (file)
@@ -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);
index 091fec24b2951a60a23a9310c4261daeb0d2dbd7..a0a270149b4f600afecbe46d721d3c285adb6d50 100644 (file)
@@ -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()
index 1bcccd8646f2a317c2ef06a4afa9590264eac594..6ce39932addedd155f0b6a2d968fa714695f2f1a 100644 (file)
@@ -743,6 +743,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1499,
 /**/
     1498,
 /**/