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