From 88d9b4b831d8457fb2205b566ec151e975a8421c Mon Sep 17 00:00:00 2001 From: David Ostrovsky Date: Mon, 4 Aug 2014 10:15:41 +0200 Subject: [PATCH] InlineEdit: Make revision resource change edit aware In some cases client fire requests for cnange edit and Revisions collection parser needs to be extended to understand what change edit is. We have two cases either the patch set id is passed (0) or revId is passed and cannot be found in the databases. Change-Id: I5dd069e43679b67ab319e43ed40fd710ecbac12c --- .../gerrit/server/change/Revisions.java | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) 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 239aae2bd1..8f8de472e7 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 @@ -14,8 +14,10 @@ package com.google.gerrit.server.change; +import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -24,11 +26,15 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.RevId; import com.google.gerrit.reviewdb.server.ReviewDb; +import com.google.gerrit.server.edit.ChangeEdit; +import com.google.gerrit.server.edit.ChangeEditUtil; +import com.google.gerrit.server.project.InvalidChangeOperationException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; +import java.io.IOException; import java.util.Collections; import java.util.List; @@ -36,12 +42,15 @@ import java.util.List; public class Revisions implements ChildCollection { private final DynamicMap> views; private final Provider dbProvider; + private final ChangeEditUtil editUtil; @Inject Revisions(DynamicMap> views, - Provider dbProvider) { + Provider dbProvider, + ChangeEditUtil editUtil) { this.views = views; this.dbProvider = dbProvider; + this.editUtil = editUtil; } @Override @@ -87,7 +96,9 @@ public class Revisions implements ChildCollection list = db.patchSets().byRevision(revid).toList(); + if (list.isEmpty()) { + return loadEdit(change, revid); + } + return list; } else { return db.patchSets().byRevisionRange(revid, revid.max()).toList(); } @@ -122,4 +137,22 @@ public class Revisions implements ChildCollection loadEdit(ChangeResource change, RevId revid) + throws OrmException { + try { + Optional edit = editUtil.byChange(change.getChange()); + if (edit.isPresent()) { + PatchSet ps = new PatchSet(new PatchSet.Id( + change.getChange().getId(), 0)); + ps.setRevision(edit.get().getRevision()); + if (revid == null || edit.get().getRevision().equals(revid)) { + return Collections.singletonList(ps); + } + } + } catch (AuthException | IOException | InvalidChangeOperationException e) { + throw new OrmException(e); + } + return Collections.emptyList(); + } }