Fix init of new site

Initializing a new site failed with:

fatal: 1) Error injecting constructor, java.lang.IllegalStateException: gerrit.basePath must be configured
fatal:   at com.google.gerrit.server.git.LocalDiskRepositoryManager.<init>(LocalDiskRepositoryManager.java:118)
fatal:   at com.google.gerrit.server.git.LocalDiskRepositoryManager.class(LocalDiskRepositoryManager.java:55)
fatal:   while locating com.google.gerrit.server.git.LocalDiskRepositoryManager
fatal:   while locating com.google.gerrit.server.git.GitRepositoryManager
fatal: Caused by: java.lang.IllegalStateException: gerrit.basePath must be configured
fatal: 	at com.google.gerrit.server.git.LocalDiskRepositoryManager.<init>(LocalDiskRepositoryManager.java:121)
fatal: 	at com.google.gerrit.server.git.LocalDiskRepositoryManager$$FastClassByGuice$$341d02c5.newInstance(<generated>)
....

We can't use LocalDiskRepositoryManager since gerrit.basePath may not be
set when it is created.

Change-Id: I368ad324141ea74a82c3406bc2895e89bc55b743
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/BaseInit.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/BaseInit.java
index 60031a8..49fd1f9 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/BaseInit.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/BaseInit.java
@@ -36,11 +36,9 @@
 import com.google.gerrit.pgm.util.SiteProgram;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.config.GerritServerConfigModule;
-import com.google.gerrit.server.config.RepositoryConfig;
 import com.google.gerrit.server.config.SitePath;
 import com.google.gerrit.server.config.SitePaths;
 import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.git.GitRepositoryManagerModule;
 import com.google.gerrit.server.index.IndexModule;
 import com.google.gerrit.server.plugins.JarScanner;
 import com.google.gerrit.server.schema.SchemaUpdater;
@@ -455,7 +453,6 @@
               bind(InitFlags.class).toInstance(init.flags);
             }
           });
-      modules.add(new GitRepositoryManagerModule(new RepositoryConfig(init.flags.cfg)));
       Injector dbInjector = createDbInjector(SINGLE_USER);
       switch (IndexModule.getIndexType(dbInjector)) {
         case LUCENE:
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/GitRepositoryManagerOnInit.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/GitRepositoryManagerOnInit.java
new file mode 100644
index 0000000..2f94bdb
--- /dev/null
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/GitRepositoryManagerOnInit.java
@@ -0,0 +1,66 @@
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.pgm.init.api;
+
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.SortedSet;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.eclipse.jgit.internal.storage.file.FileRepository;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.RepositoryCache.FileKey;
+import org.eclipse.jgit.util.FS;
+
+@Singleton
+public class GitRepositoryManagerOnInit implements GitRepositoryManager {
+  private final InitFlags flags;
+  private final SitePaths site;
+
+  @Inject
+  GitRepositoryManagerOnInit(InitFlags flags, SitePaths site) {
+    this.flags = flags;
+    this.site = site;
+  }
+
+  @Override
+  public Repository openRepository(Project.NameKey name)
+      throws RepositoryNotFoundException, IOException {
+    return new FileRepository(getPath(name));
+  }
+
+  @Override
+  public Repository createRepository(Project.NameKey name) {
+    throw new UnsupportedOperationException("not implemented");
+  }
+
+  @Override
+  public SortedSet<Project.NameKey> list() {
+    throw new UnsupportedOperationException("not implemented");
+  }
+
+  private File getPath(Project.NameKey name) {
+    Path basePath = site.resolve(flags.cfg.getString("gerrit", null, "basePath"));
+    if (basePath == null) {
+      throw new IllegalStateException("gerrit.basePath must be configured");
+    }
+    return FileKey.resolve(basePath.resolve(name.get()).toFile(), FS.DETECTED);
+  }
+}
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/SequencesOnInit.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/SequencesOnInit.java
index 769c7f5..bfad889 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/SequencesOnInit.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/api/SequencesOnInit.java
@@ -29,7 +29,7 @@
   private final AllUsersNameOnInitProvider allUsersName;
 
   @Inject
-  SequencesOnInit(GitRepositoryManager repoManager, AllUsersNameOnInitProvider allUsersName) {
+  SequencesOnInit(GitRepositoryManagerOnInit repoManager, AllUsersNameOnInitProvider allUsersName) {
     this.repoManager = repoManager;
     this.allUsersName = allUsersName;
   }