Merge "Inject InitStep members again before calling postRun." into stable-2.9
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/BaseInit.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/BaseInit.java
index 76adadc..5a8cb4f 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/BaseInit.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/BaseInit.java
@@ -70,6 +70,8 @@
   protected final PluginsDistribution pluginsDistribution;
   private final List<String> pluginsToInstall;
 
+  private Injector sysInjector;
+
   protected BaseInit(PluginsDistribution pluginsDistribution,
       List<String> pluginsToInstall) {
     this.standalone = true;
@@ -111,7 +113,7 @@
       run = createSiteRun(init);
       run.upgradeSchema();
 
-      init.initializer.postRun();
+      init.initializer.postRun(createSysInjector(init));
     } catch (Exception failure) {
       if (init.flags.deleteOnFailure) {
         recursiveDelete(getSitePath());
@@ -316,15 +318,18 @@
   }
 
   private Injector createSysInjector(final SiteInit init) {
-    final List<Module> modules = new ArrayList<Module>();
-    modules.add(new AbstractModule() {
-      @Override
-      protected void configure() {
-        bind(ConsoleUI.class).toInstance(init.ui);
-        bind(InitFlags.class).toInstance(init.flags);
-      }
-    });
-    return createDbInjector(SINGLE_USER).createChildInjector(modules);
+    if (sysInjector == null) {
+      final List<Module> modules = new ArrayList<Module>();
+      modules.add(new AbstractModule() {
+        @Override
+        protected void configure() {
+          bind(ConsoleUI.class).toInstance(init.ui);
+          bind(InitFlags.class).toInstance(init.flags);
+        }
+      });
+      sysInjector = createDbInjector(SINGLE_USER).createChildInjector(modules);
+    }
+    return sysInjector;
   }
 
   private static void recursiveDelete(File path) {
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitPlugins.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitPlugins.java
index e5f6f56..add5c8d 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitPlugins.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitPlugins.java
@@ -19,6 +19,7 @@
 import com.google.gerrit.server.config.SitePaths;
 import com.google.gerrit.server.plugins.PluginLoader;
 import com.google.inject.Inject;
+import com.google.inject.Injector;
 import com.google.inject.Singleton;
 
 import java.io.File;
@@ -80,6 +81,8 @@
   private final InitPluginStepsLoader pluginLoader;
   private final PluginsDistribution pluginsDistribution;
 
+  private Injector postRunInjector;
+
   @Inject
   InitPlugins(final ConsoleUI ui, final SitePaths site,
       InitFlags initFlags, InitPluginStepsLoader pluginLoader,
@@ -104,6 +107,11 @@
     postInitPlugins();
   }
 
+  @Inject(optional = true)
+  void setPostRunInjector(Injector injector) {
+    postRunInjector = injector;
+  }
+
   private void installPlugins() throws IOException {
     List<PluginData> plugins = listPlugins(site, pluginsDistribution);
     for (PluginData plugin : plugins) {
@@ -155,6 +163,7 @@
 
   private void postInitPlugins() throws Exception {
     for (InitStep initStep : pluginLoader.getInitSteps()) {
+      postRunInjector.injectMembers(initStep);
       initStep.postRun();
     }
   }
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java
index 82daf81..d980c09 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java
@@ -108,12 +108,13 @@
     }
   }
 
-  public void postRun() throws Exception {
+  public void postRun(Injector injector) throws Exception {
     for (InitStep step : steps) {
       if (step instanceof InitPlugins
           && flags.skipPlugins) {
         continue;
       }
+      injector.injectMembers(step);
       step.postRun();
     }
   }