summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/server/query/change/ChangeData.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/server/query/change/ChangeData.java')
-rw-r--r--java/com/google/gerrit/server/query/change/ChangeData.java61
1 files changed, 50 insertions, 11 deletions
diff --git a/java/com/google/gerrit/server/query/change/ChangeData.java b/java/com/google/gerrit/server/query/change/ChangeData.java
index 26e660a859..a69d837c6d 100644
--- a/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -106,6 +106,7 @@ import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
@@ -237,11 +238,11 @@ public class ChangeData {
}
public ChangeData create(Project.NameKey project, Change.Id id) {
- return assistedFactory.create(project, id, null, null);
+ return assistedFactory.create(project, id, null, null, null);
}
public ChangeData create(Project.NameKey project, Change.Id id, ObjectId metaRevision) {
- ChangeData cd = assistedFactory.create(project, id, null, null);
+ ChangeData cd = assistedFactory.create(project, id, null, null, null);
cd.setMetaRevision(metaRevision);
return cd;
}
@@ -254,19 +255,29 @@ public class ChangeData {
}
public ChangeData create(Change change) {
- return assistedFactory.create(change.getProject(), change.getId(), change, null);
+ return create(change, null);
+ }
+
+ public ChangeData create(Change change, Change.Id virtualId) {
+ return assistedFactory.create(
+ change.getProject(),
+ change.getId(),
+ !Objects.equals(virtualId, change.getId()) ? virtualId : null,
+ change,
+ null);
}
public ChangeData create(ChangeNotes notes) {
return assistedFactory.create(
- notes.getChange().getProject(), notes.getChangeId(), notes.getChange(), notes);
+ notes.getChange().getProject(), notes.getChangeId(), null, notes.getChange(), notes);
}
}
public interface AssistedFactory {
ChangeData create(
Project.NameKey project,
- Change.Id id,
+ @Assisted("changeId") Change.Id id,
+ @Assisted("virtualId") @Nullable Change.Id virtualId,
@Nullable Change change,
@Nullable ChangeNotes notes);
}
@@ -333,6 +344,7 @@ public class ChangeData {
project,
id,
null,
+ null,
changeNotes);
cd.currentPatchSet =
PatchSet.builder()
@@ -432,6 +444,7 @@ public class ChangeData {
private ImmutableList<byte[]> refStatePatterns;
private String changeServerId;
private ChangeNumberVirtualIdAlgorithm virtualIdFunc;
+ private Change.Id virtualId;
@Inject
private ChangeData(
@@ -455,7 +468,8 @@ public class ChangeData {
ChangeNumberVirtualIdAlgorithm virtualIdFunc,
@SkipCurrentRulesEvaluationOnClosedChanges Boolean skipCurrentRulesEvaluationOnClosedChange,
@Assisted Project.NameKey project,
- @Assisted Change.Id id,
+ @Assisted("changeId") Change.Id id,
+ @Assisted("virtualId") @Nullable Change.Id virtualId,
@Assisted @Nullable Change change,
@Assisted @Nullable ChangeNotes notes) {
this.approvalsUtil = approvalsUtil;
@@ -485,6 +499,7 @@ public class ChangeData {
this.changeServerId = notes == null ? null : notes.getServerId();
this.virtualIdFunc = virtualIdFunc;
+ this.virtualId = virtualId;
}
/**
@@ -605,8 +620,32 @@ public class ChangeData {
return legacyId;
}
- public Change.Id getVirtualId() {
- return virtualIdFunc == null ? legacyId : virtualIdFunc.apply(changeServerId, legacyId);
+ public static void ensureChangeServerId(Iterable<ChangeData> changes) {
+ ChangeData first = Iterables.getFirst(changes, null);
+ if (first == null) {
+ return;
+ }
+
+ for (ChangeData cd : changes) {
+ cd.changeServerId();
+ }
+ }
+
+ public String changeServerId() {
+ if (changeServerId == null) {
+ if (!lazyload()) {
+ return null;
+ }
+ changeServerId = notes().getServerId();
+ }
+ return changeServerId;
+ }
+
+ public Change.Id virtualId() {
+ if (virtualId == null) {
+ return virtualIdFunc == null ? legacyId : virtualIdFunc.apply(changeServerId, legacyId);
+ }
+ return virtualId;
}
public Project.NameKey project() {
@@ -1345,7 +1384,7 @@ public class ChangeData {
if (!lazyload()) {
return ImmutableMap.of();
}
- starRefs = requireNonNull(starredChangesUtil).byChange(legacyId);
+ starRefs = requireNonNull(starredChangesUtil).byChange(virtualId());
}
return starRefs;
}
@@ -1363,7 +1402,7 @@ public class ChangeData {
if (!lazyload()) {
return ImmutableSet.of();
}
- starsOf = StarsOf.create(accountId, starredChangesUtil.getLabels(accountId, legacyId));
+ starsOf = StarsOf.create(accountId, starredChangesUtil.getLabels(accountId, virtualId()));
}
}
return starsOf.stars();
@@ -1524,7 +1563,7 @@ public class ChangeData {
// this is suboptimal, but is ok for the purposes of
// draftsByUser(), and easier than trying to rebuild the change at
// this point.
- && !notes().getDraftComments(account, getVirtualId(), ref).isEmpty()) {
+ && !notes().getDraftComments(account, virtualId(), ref).isEmpty()) {
draftsByUser.put(account, ref.getObjectId());
}
}