Merge branch 'stable-2.13'
* stable-2.13:
Supply parent before validating project creation
Log: Print stack trace on exception
ReplayMessagesStep: Fix potential NullPointerException
Change-Id: Ia636b6339d4e270b5126a895a1d64f278b9d6245
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportLog.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportLog.java
index 38e0f8b..8c6f27e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportLog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportLog.java
@@ -14,6 +14,7 @@
package com.googlesource.gerrit.plugins.importer;
+import com.google.common.base.Throwables;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.gerrit.audit.AuditEvent;
@@ -96,7 +97,7 @@
event.setProperty(TARGET_PROJECT_NAME, targetProject.get());
if (ex != null) {
- event.setProperty(ERROR, ex.toString());
+ event.setProperty(ERROR, Throwables.getStackTraceAsString(ex));
}
log.callAppenders(event);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java
index 5c946c4..83c9cb9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ImportProject.java
@@ -232,7 +232,8 @@
checkProjectInSource(pm);
setParentProjectName(input, pm);
checkPreconditions(pm);
- try (Repository repo = openRepoStep.open(targetProject, resume, pm)) {
+ try (Repository repo = openRepoStep.open(targetProject, resume, pm,
+ parent)) {
ImportJson.persist(lockFile, importJson.format(input, info), pm);
configRepoStep.configure(repo, srcProject, input.from, pm);
gitFetchStep.fetch(input.user, input.pass, repo, pm);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java
index 8b347a1..cacc18e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/OpenRepositoryStep.java
@@ -19,13 +19,16 @@
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
+import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.project.CreateProjectArgs;
import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectsCollection;
import com.google.gerrit.server.validators.ProjectCreationValidationListener;
import com.google.gerrit.server.validators.ValidationException;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import com.google.inject.Singleton;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
@@ -40,18 +43,22 @@
private final ProjectCache projectCache;
private final DynamicSet<ProjectCreationValidationListener>
projectCreationValidationListeners;
+ private final Provider<ProjectsCollection> projectsCollection;
@Inject
OpenRepositoryStep(GitRepositoryManager git,
ProjectCache projectCache,
- DynamicSet<ProjectCreationValidationListener> projectCreationValidationListeners) {
+ DynamicSet<ProjectCreationValidationListener> projectCreationValidationListeners,
+ Provider<ProjectsCollection> projectsCollection) {
this.git = git;
this.projectCache = projectCache;
this.projectCreationValidationListeners = projectCreationValidationListeners;
+ this.projectsCollection = projectsCollection;
}
- Repository open(Project.NameKey name, boolean resume, ProgressMonitor pm)
- throws ResourceConflictException, IOException {
+ Repository open(Project.NameKey name, boolean resume, ProgressMonitor pm,
+ Project.NameKey parent)
+ throws ResourceConflictException, IOException, UnprocessableEntityException {
pm.beginTask("Open repository", 1);
try {
Repository repo = git.openRepository(name);
@@ -69,17 +76,18 @@
}
}
- beforeCreateProject(name);
+ beforeCreateProject(name, parent);
Repository repo = git.createRepository(name);
onProjectCreated(name);
updateAndEnd(pm);
return repo;
}
- private void beforeCreateProject(Project.NameKey name)
- throws ResourceConflictException {
+ private void beforeCreateProject(Project.NameKey name, Project.NameKey parent)
+ throws ResourceConflictException, UnprocessableEntityException, IOException {
CreateProjectArgs args = new CreateProjectArgs();
args.setProjectName(name);
+ args.newParent = projectsCollection.get().parse(parent.get()).getControl();
for (ProjectCreationValidationListener l : projectCreationValidationListeners) {
try {
l.validateNewProject(args);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayMessagesStep.java b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayMessagesStep.java
index 3fb9932..dde14ee 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayMessagesStep.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/ReplayMessagesStep.java
@@ -87,12 +87,12 @@
}
Timestamp ts = msg.date;
+ PatchSet.Id psId = msg._revisionNumber != null
+ ? new PatchSet.Id(change.getId(), msg._revisionNumber)
+ : null;
if (msg.author != null) {
Account.Id userId = accountUtil.resolveUser(api, msg.author);
ChangeUpdate update = updateFactory.create(control(change, userId), ts);
- PatchSet.Id psId = msg._revisionNumber != null
- ? new PatchSet.Id(change.getId(), msg._revisionNumber)
- : null;
ChangeMessage cmsg = new ChangeMessage(msgKey, userId, ts, psId);
cmsg.setMessage(msg.message);
cmUtil.addChangeMessage(db, update, cmsg);
@@ -101,7 +101,7 @@
// Message create by the GerritPersonIdent user
ChangeMessage cmsg =
new ChangeMessage(new ChangeMessage.Key(change.getId(), msg.id),
- null, ts, new PatchSet.Id(change.getId(), msg._revisionNumber));
+ null, ts, psId);
cmsg.setMessage(msg.message);
db.changeMessages().insert(Collections.singleton(cmsg));
}