Merge changes I112a862d,I0c26a771,Id7d054ce,Ib9adf725
* changes:
ChangeJson: Don't get all ref states when only meta ref is needed
ChangeData: Cache metaRevision when it is computed in metaRevisionOrThrow()
ChangeJson: Remove unneeded null check for ChangeData#getRefStates()
ChangeData: Do not import Project.NameKey
diff --git a/java/com/google/gerrit/server/change/ChangeJson.java b/java/com/google/gerrit/server/change/ChangeJson.java
index d30e91a..f5af631 100644
--- a/java/com/google/gerrit/server/change/ChangeJson.java
+++ b/java/com/google/gerrit/server/change/ChangeJson.java
@@ -63,7 +63,6 @@
import com.google.gerrit.entities.PatchSet;
import com.google.gerrit.entities.PatchSetApproval;
import com.google.gerrit.entities.Project;
-import com.google.gerrit.entities.RefNames;
import com.google.gerrit.entities.SubmitRecord;
import com.google.gerrit.entities.SubmitRecord.Status;
import com.google.gerrit.entities.SubmitRequirementResult;
@@ -86,7 +85,6 @@
import com.google.gerrit.extensions.common.SubmitRequirementResultInfo;
import com.google.gerrit.extensions.common.TrackingIdInfo;
import com.google.gerrit.extensions.restapi.Url;
-import com.google.gerrit.index.RefState;
import com.google.gerrit.index.query.QueryResult;
import com.google.gerrit.metrics.Description;
import com.google.gerrit.metrics.Description.Units;
@@ -868,14 +866,8 @@
TraceContext.newTimer(
"Get change meta ref",
Metadata.builder().changeId(cd.change().getId().get()).build())) {
- if (cd.getRefStates() != null) {
- String metaName = RefNames.changeMetaRef(cd.getId());
- Optional<RefState> metaState =
- cd.getRefStates().values().stream().filter(r -> r.ref().equals(metaName)).findAny();
- return metaState.map(RefState::id);
- }
+ return cd.metaRevision();
}
- return Optional.empty();
}
private Boolean isReviewedByCurrentUser(ChangeData cd, CurrentUser user) {
diff --git a/java/com/google/gerrit/server/query/change/ChangeData.java b/java/com/google/gerrit/server/query/change/ChangeData.java
index 5676ab4..b607691 100644
--- a/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -50,7 +50,6 @@
import com.google.gerrit.entities.PatchSet;
import com.google.gerrit.entities.PatchSetApproval;
import com.google.gerrit.entities.Project;
-import com.google.gerrit.entities.Project.NameKey;
import com.google.gerrit.entities.RefNames;
import com.google.gerrit.entities.RobotComment;
import com.google.gerrit.entities.SubmitRecord;
@@ -450,7 +449,7 @@
private Integer totalCommentCount;
private LabelTypes labelTypes;
private Optional<Instant> mergedOn;
- private ImmutableSetMultimap<NameKey, RefState> refStates;
+ private ImmutableSetMultimap<Project.NameKey, RefState> refStates;
private ImmutableList<byte[]> refStatePatterns;
private String gerritServerId;
private String changeServerId;
@@ -692,10 +691,10 @@
return this;
}
- public ObjectId metaRevisionOrThrow() {
+ public Optional<ObjectId> metaRevision() {
if (notes == null) {
if (metaRevision != null) {
- return metaRevision;
+ return Optional.of(metaRevision);
}
if (refStates != null) {
ImmutableSet<RefState> refs = refStates.get(project);
@@ -703,17 +702,25 @@
String metaRef = RefNames.changeMetaRef(getId());
for (RefState r : refs) {
if (r.ref().equals(metaRef)) {
- return r.id();
+ return Optional.of(r.id());
}
}
}
}
- throwIfNotLazyLoad("metaRevision");
+ if (!lazyload()) {
+ return Optional.empty();
+ }
@SuppressWarnings("unused")
var unused = notes();
}
- return notes.getRevision();
+ metaRevision = notes.getRevision();
+ return Optional.of(metaRevision);
+ }
+
+ public ObjectId metaRevisionOrThrow() {
+ return metaRevision()
+ .orElseThrow(() -> new IllegalStateException("'metaRevision' field not populated"));
}
boolean fastIsVisibleTo(CurrentUser user) {
@@ -1499,13 +1506,14 @@
}
}
- public SetMultimap<NameKey, RefState> getRefStates() {
+ public SetMultimap<Project.NameKey, RefState> getRefStates() {
if (refStates == null) {
if (!lazyload()) {
return ImmutableSetMultimap.of();
}
- ImmutableSetMultimap.Builder<NameKey, RefState> result = ImmutableSetMultimap.builder();
+ ImmutableSetMultimap.Builder<Project.NameKey, RefState> result =
+ ImmutableSetMultimap.builder();
for (Table.Cell<Account.Id, PatchSet.Id, Ref> edit : editRefs().cellSet()) {
result.put(
project,