Update project state to READ_ONLY before starting the rename operation

This appears to have been the original intent [1], but the `.lock()`
method was never called during rename.

[1] https://gerrit.googlesource.com/plugins/rename-project/+/7220f19c288e4c329f010bbc12bad76187f604cd/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java#45

Change-Id: Ie1694eb5729174d7ec616e131d00d66cc1f1684b
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
index 572cbeb..b809a4c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
@@ -287,8 +287,8 @@
     Exception ex = null;
     stepsPerformed.clear();
     try {
+      lockUnlockProject.lock(oldProjectKey);
       fsRenameStep(oldProjectKey, newProjectKey, pm);
-
       if (!isReplica) {
 
         cacheRenameStep(rsrc.getNameKey(), newProjectKey);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
index 7f6823d..bd8a671 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
@@ -37,17 +37,20 @@
   private final FilesystemRenameHandler fsHandler;
   private final CacheRenameHandler cacheHandler;
   private final IndexUpdateHandler indexHandler;
+  private final LockUnlockProject lockUnlockProject;
 
   @Inject
   RevertRenameProject(
       DatabaseRenameHandler dbHandler,
       FilesystemRenameHandler fsHandler,
       CacheRenameHandler cacheHandler,
-      IndexUpdateHandler indexHandler) {
+      IndexUpdateHandler indexHandler,
+      LockUnlockProject lockUnlockProject) {
     this.dbHandler = dbHandler;
     this.fsHandler = fsHandler;
     this.cacheHandler = cacheHandler;
     this.indexHandler = indexHandler;
+    this.lockUnlockProject = lockUnlockProject;
   }
 
   void performRevert(
@@ -102,5 +105,6 @@
             e.toString());
       }
     }
+    lockUnlockProject.unlock(oldProjectKey);
   }
 }
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
index 52431c7..399da4f 100644
--- a/src/main/resources/Documentation/about.md
+++ b/src/main/resources/Documentation/about.md
@@ -1,5 +1,8 @@
 Provides the ability to rename a project.
 
+Note: The project state is set to READ_ONLY at the start of the rename operation.
+If the rename operation fails, the project state is reverted back to ACTIVE.
+
 Limitations
 -----------
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
index 24074e6..e8b155f 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
@@ -29,7 +29,6 @@
 import com.google.gerrit.server.project.ProjectState;
 import com.googlesource.gerrit.plugins.renameproject.RenameProject.Step;
 import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
-import java.util.Optional;
 import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
@@ -128,11 +127,13 @@
   private void assertReverted() throws Exception {
     evictCaches();
 
-    Optional<ProjectState> oldProjectState = projectCache.get(oldProjectKey);
-    assertThat(oldProjectState.isPresent()).isTrue();
+    ProjectState oldProjectState = projectCache.get(oldProjectKey).orElse(null);
+    assertThat(oldProjectState).isNotNull();
+    assertThat(oldProjectState.getProject().getState())
+        .isEqualTo(com.google.gerrit.extensions.client.ProjectState.ACTIVE);
 
-    Optional<ProjectState> newProjectState = projectCache.get(newProjectKey);
-    assertThat(newProjectState.isPresent()).isFalse();
+    ProjectState newProjectState = projectCache.get(newProjectKey).orElse(null);
+    assertThat(newProjectState).isNull();
 
     assertThat(queryProvider.get().byProject(oldProjectKey)).isNotEmpty();
     assertThat(queryProvider.get().byProject(newProjectKey)).isEmpty();
@@ -141,11 +142,13 @@
   private void assertRenamed(Result result) throws Exception {
     evictCaches();
 
-    Optional<ProjectState> oldProjectState = projectCache.get(oldProjectKey);
-    assertThat(oldProjectState.isPresent()).isFalse();
+    ProjectState oldProjectState = projectCache.get(oldProjectKey).orElse(null);
+    assertThat(oldProjectState).isNull();
 
-    Optional<ProjectState> newProjectState = projectCache.get(newProjectKey);
-    assertThat(newProjectState.isPresent()).isTrue();
+    ProjectState newProjectState = projectCache.get(newProjectKey).orElse(null);
+    assertThat(newProjectState).isNotNull();
+    assertThat(newProjectState.getProject().getState())
+        .isEqualTo(com.google.gerrit.extensions.client.ProjectState.ACTIVE);
 
     if (renameProject.getStepsPerformed().contains(Step.DATABASE)) {
       ChangeApi changeApi = gApi.changes().id(NEW_PROJECT_NAME, result.getChange().getId().get());