patch 7.4.1550
Problem:    Cannot load packages early.
Solution:   Add the ":packloadall" command.
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index c25ee2e..34defea 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -1014,6 +1014,9 @@
 EX(CMD_packadd,		"packadd",	ex_packadd,
 			BANG|FILE1|NEEDARG|TRLBAR|SBOXOK|CMDWIN,
 			ADDR_LINES),
+EX(CMD_packloadall,	"packloadall",	ex_packloadall,
+			BANG|TRLBAR|SBOXOK|CMDWIN,
+			ADDR_LINES),
 EX(CMD_pclose,		"pclose",	ex_pclose,
 			BANG|TRLBAR,
 			ADDR_LINES),
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 19d7d19..616f7a0 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3189,14 +3189,21 @@
     vim_free(ffname);
 }
 
+static int did_source_packages = FALSE;
+
 /*
+ * ":packloadall"
  * Find plugins in the package directories and source them.
  */
     void
-source_packages()
+ex_packloadall(exarg_T *eap)
 {
-    do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR,
+    if (!did_source_packages || (eap != NULL && eap->forceit))
+    {
+	did_source_packages = TRUE;
+	do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR,
 							add_pack_plugin, p_pp);
+    }
 }
 
 /*
diff --git a/src/main.c b/src/main.c
index 076898c..7bbf248 100644
--- a/src/main.c
+++ b/src/main.c
@@ -634,7 +634,7 @@
 # endif
 	TIME_MSG("loading plugins");
 
-	source_packages();
+	ex_packloadall(NULL);
 	TIME_MSG("loading packages");
     }
 #endif
diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro
index e10f072..1f11774 100644
--- a/src/proto/ex_cmds2.pro
+++ b/src/proto/ex_cmds2.pro
@@ -62,8 +62,7 @@
 void ex_runtime(exarg_T *eap);
 int source_runtime(char_u *name, int all);
 int do_in_runtimepath(char_u *name, int all, void (*callback)(char_u *fname, void *ck), void *cookie);
-void source_packages(void);
-void ex_loadplugin(exarg_T *eap);
+void ex_packloadall(exarg_T *eap);
 void ex_packadd(exarg_T *eap);
 void ex_options(exarg_T *eap);
 void ex_source(exarg_T *eap);
diff --git a/src/testdir/test_packadd.vim b/src/testdir/test_packadd.vim
index a0a2701..2b66f6d 100644
--- a/src/testdir/test_packadd.vim
+++ b/src/testdir/test_packadd.vim
@@ -80,3 +80,20 @@
   call assert_equal("packadd pluginC", li[2])
   call assert_equal("packadd ", li[3])
 endfunc
+
+func Test_packloadall()
+  let plugindir = &packpath . '/pack/mine/start/foo/plugin'
+  call mkdir(plugindir, 'p')
+  call writefile(['let g:plugin_foo_number = 1234'], plugindir . '/bar.vim')
+  packloadall
+  call assert_equal(1234, g:plugin_foo_number)
+
+  " only works once
+  call writefile(['let g:plugin_bar_number = 4321'], plugindir . '/bar2.vim')
+  packloadall
+  call assert_false(exists('g:plugin_bar_number'))
+
+  " works when ! used
+  packloadall!
+  call assert_equal(4321, g:plugin_bar_number)
+endfunc
diff --git a/src/version.c b/src/version.c
index 87fdebc..4f66f9d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1550,
+/**/
     1549,
 /**/
     1548,