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;
+ }
+ }
+}