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
index d5d7863..1b9e54f 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -213,7 +213,7 @@
 			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 24f83aa..c25ee2e 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -1012,7 +1012,7 @@
 			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 b6992b2..7a0d0bd 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2918,8 +2918,7 @@
 /*
  * 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 @@
 
 #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 @@
     }
     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 @@
     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 @@
     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 6fd86fb..bd9ef5c 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1577,6 +1577,7 @@
 #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 091fec2..a0a2701 100644
--- a/src/testdir/test_packadd.vim
+++ b/src/testdir/test_packadd.vim
@@ -31,6 +31,10 @@
   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 1bcccd8..6ce3993 100644
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1499,
+/**/
     1498,
 /**/
     1497,