Adapt checks to the new rename replication feature

With the introduction of the rename replication feature, the check for
project existence has to be brought out of the RenamePreconditions and
put in RenameCommand. This is done to avoid NullPointerException on a
non-existent project when the "--replication" option is used.

Change-Id: Ibc6e9123b9f86ef29d9106031841cd3f22fa06a5
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
index 9c57418..2dfb975 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
@@ -75,6 +75,10 @@
           new ProjectResource(
               projectCacheProvider.get().get(new Project.NameKey(projectControl)), self.get());
 
+      if (rsrc.getProjectState() == null) {
+        throw new CannotRenameProjectException("Project does not exist");
+      }
+
       if (replication) {
         if (renameProject.isAdmin()) {
           renameProject.fsRenameStep(
@@ -96,7 +100,7 @@
           }
         }
       }
-    } catch (RestApiException | OrmException | IOException e) {
+    } catch (RestApiException | OrmException | IOException | CannotRenameProjectException e) {
       throw die(e);
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
index e92a4c1..9efa51d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
@@ -75,9 +75,6 @@
 
   public void assertCanRename(ProjectResource oldProjectRsrc, Project.NameKey newProjectKey)
       throws CannotRenameProjectException {
-    if (oldProjectRsrc.getProjectState() == null) {
-      throw new CannotRenameProjectException("Project does not exist");
-    }
     Project.NameKey oldProjectKey = oldProjectRsrc.getNameKey();
     assertNewRepoNotExists(newProjectKey);
     assertIsNotDefaultProject(oldProjectKey);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
index 01a7be9..a552a4c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
@@ -129,6 +129,17 @@
 
   @Test
   @UseLocalDisk
+  public void testRenameReplicationViaSshOnNonExisting() throws Exception {
+    createChange();
+    adminSshSession.exec(
+        PLUGIN_NAME + " " + NON_EXISTING_NAME + " " + project.get() + " " + REPLICATION_OPTION);
+
+    assertThat(adminSshSession.getError()).contains("Project does not exist");
+    adminSshSession.assertFailure();
+  }
+
+  @Test
+  @UseLocalDisk
   public void testRenameNonExistingProjectFail() throws Exception {
     createChange();
     adminSshSession.exec(PLUGIN_NAME + " " + NON_EXISTING_NAME + " " + project.get());