Merge branch 'stable-2.12' * stable-2.12: Supply parent before validating project creation Change-Id: Ia51fa323d767ebe173441c2b0cd7c54433e949e4
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);