Fix diff view for files in change edit

If a change edit is viewed in the change screen and the change screen
is not in edit mode, then clicking on any file in the file list
results in a not found screen. This is because the client makes
requests to the server where 'edit' is used as revision and the server
cannot resolve this revision. Other edit-related requests use '0' as
revision for change edits and those succeed.

Fix this by supporting 'edit' as revision for change edits.

Also document '0' and 'edit' as possible values for revision-id.

Change-Id: If93894b330e0c7942a94a532eca84a73a84b06f5
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 63eccfb..45d2327 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -4237,6 +4237,7 @@
 * an abbreviated commit ID that uniquely identifies one revision of the
   change ("674ac754"), at least 4 digits are required
 * a legacy numeric patch number ("1" for first patch set of the change)
+* "0" or the literal `edit` for a change edit
 
 [[json-entities]]
 == JSON Entities
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java
index affef17..c611f2c 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/edit/ChangeEditIT.java
@@ -148,6 +148,17 @@
   }
 
   @Test
+  public void parseEditRevision() throws Exception {
+    assertThat(modifier.createEdit(change, ps)).isEqualTo(RefUpdate.Result.NEW);
+
+    // check that '0' is parsed as edit revision
+    gApi.changes().id(change.getChangeId()).revision(0).comments();
+
+    // check that 'edit' is parsed as edit revision
+    gApi.changes().id(change.getChangeId()).revision("edit").comments();
+  }
+
+  @Test
   public void deleteEdit() throws Exception {
     assertThat(modifier.createEdit(change, ps)).isEqualTo(RefUpdate.Result.NEW);
     assertThat(
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java
index a390505..30a09cf 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revisions.java
@@ -104,7 +104,7 @@
 
   private List<RevisionResource> find(ChangeResource change, String id)
       throws OrmException, IOException, AuthException {
-    if (id.equals("0")) {
+    if (id.equals("0") || id.equals("edit")) {
       return loadEdit(change, null);
     } else if (id.length() < 6 && id.matches("^[1-9][0-9]{0,4}$")) {
       // Legacy patch set number syntax.