Extract the open repository logic into own import step

Change-Id: I1c4434dac5dde938f9b7cf24a46cc5371769d05b
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java
index db23899..dd34ca5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProjectTask.java
@@ -60,7 +60,6 @@
 import com.google.gerrit.server.change.PostReview;
 import com.google.gerrit.server.change.RevisionResource;
 import com.google.gerrit.server.config.AuthConfig;
-import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.index.ChangeIndexer;
 import com.google.gerrit.server.notedb.ChangeUpdate;
 import com.google.gerrit.server.patch.PatchSetInfoFactory;
@@ -74,7 +73,6 @@
 
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.internal.storage.file.LockFile;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
@@ -116,7 +114,7 @@
         @Assisted StringBuffer result);
   }
 
-  private final GitRepositoryManager git;
+  private final OpenRepositoryStep openRepoStep;
   private final File lockRoot;
   private final ReviewDb db;
   private final AccountCache accountCache;
@@ -142,7 +140,7 @@
   private Repository repo;
 
   @Inject
-  ImportProjectTask(GitRepositoryManager git,
+  ImportProjectTask(OpenRepositoryStep openRepoStep,
       @PluginData File data,
       ReviewDb db,
       AccountCache accountCache,
@@ -162,7 +160,7 @@
       @Assisted("user") String user,
       @Assisted("password") String password,
       @Assisted StringBuffer messages) {
-    this.git = git;
+    this.openRepoStep = openRepoStep;
     this.lockRoot = data;
     this.db = db;
     this.accountCache = accountCache;
@@ -194,7 +192,7 @@
     }
 
     try {
-      repo = openRepository();
+      repo = openRepoStep.open(name, messages);
       if (repo == null) {
         return;
       }
@@ -239,26 +237,6 @@
     }
   }
 
-  private Repository openRepository() {
-    try {
-      git.openRepository(name);
-      messages.append(format("Repository %s already exists.", name.get()));
-      return null;
-    } catch (RepositoryNotFoundException e) {
-      // Project doesn't exist
-    } catch (IOException e) {
-      messages.append(e.getMessage());
-      return null;
-    }
-
-    try {
-      return git.createRepository(name);
-    } catch(IOException e) {
-      messages.append(format("Error: %s, skipping project %s", e, name.get()));
-      return null;
-    }
-  }
-
   private void setupProjectConfiguration() throws IOException {
     StoredConfig config = repo.getConfig();
     config.setString("remote", "origin", "url", fromGerrit
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/Module.java b/src/main/java/com/googlesource/gerrit/plugins/importer/Module.java
index e5b1d2d..c92fffd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/Module.java
@@ -40,5 +40,6 @@
       .annotatedWith(UniqueAnnotations.create())
       .to(ProjectRestEndpoint.class);
     install(new FactoryModuleBuilder().build(ImportProjectTask.Factory.class));
+    bind(OpenRepositoryStep.class);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java
new file mode 100644
index 0000000..6c09c29
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java
@@ -0,0 +1,58 @@
+//Copyright (C) 2015 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.googlesource.gerrit.plugins.importer;
+
+import static java.lang.String.format;
+
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.eclipse.jgit.lib.Repository;
+
+import java.io.IOException;
+
+@Singleton
+class OpenRepositoryStep {
+
+  private final GitRepositoryManager git;
+
+  @Inject
+  OpenRepositoryStep(GitRepositoryManager git) {
+    this.git = git;
+  }
+
+  Repository open(Project.NameKey name, StringBuffer out) {
+    try {
+      git.openRepository(name);
+      out.append(format("Repository %s already exists.", name.get()));
+      return null;
+    } catch (RepositoryNotFoundException e) {
+      // Project doesn't exist
+    } catch (IOException e) {
+      out.append(e.getMessage());
+      return null;
+    }
+
+    try {
+      return git.createRepository(name);
+    } catch(IOException e) {
+      out.append(format("Error: %s, skipping project %s", e, name.get()));
+      return null;
+    }
+  }
+}