diff options
Diffstat (limited to 'java/com/google/gerrit/server/query/change/ChangeData.java')
-rw-r--r-- | java/com/google/gerrit/server/query/change/ChangeData.java | 61 |
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()); } } |