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