diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java index fb892403b6..4c90ef9b75 100644 --- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java +++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java @@ -2692,12 +2692,10 @@ class ReceiveCommits { private void readChangesForReplace() { try (TraceTimer traceTimer = newTimer("readChangesForReplace")) { - Collection allNotes = - notesFactory.createUsingIndexLookup( - replaceByChange.values().stream().map(r -> r.ontoChange).collect(toList())); - for (ChangeNotes notes : allNotes) { - replaceByChange.get(notes.getChangeId()).notes = notes; - } + replaceByChange.values().stream() + .map(r -> r.ontoChange) + .map(id -> notesFactory.create(project.getNameKey(), id)) + .forEach(notes -> replaceByChange.get(notes.getChangeId()).notes = notes); } } diff --git a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java index e81428c7de..68a90d2317 100644 --- a/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java +++ b/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java @@ -660,7 +660,15 @@ public class ChangeQueryBuilder extends QueryBuilder result = queryIsSubmittable(); + assertThat(result).hasSize(1); + assertThat(result.get(0).changeId).isEqualTo(change.info().changeId); + } + + @Test + public void submittableQueryRuleNoRecord() throws Exception { + ChangeApi change = newChangeApi(); + + // Satisfy the default rule. + approveChange(change); + + // Our custom rule isn't providing any submit records. + rule.status(Optional.empty()); + change.index(); + + // is:submittable should return the change, since it was approved and the custom rule is not + // blocking it. + List result = queryIsSubmittable(); + assertThat(result).hasSize(1); + assertThat(result.get(0).changeId).isEqualTo(change.info().changeId); + } + + private List queryIsSubmittable() throws Exception { + return gApi.changes().query("is:submittable project:" + project.get()).get(); + } + + private ChangeApi newChangeApi() throws Exception { + return gApi.changes().id(createChange().getChangeId()); + } + + private void approveChange(ChangeApi changeApi) throws Exception { + changeApi.current().review(ReviewInput.approve()); + } + + private void rejectChange(ChangeApi changeApi) throws Exception { + changeApi.current().review(ReviewInput.reject()); + } + @Singleton private static class CustomSubmitRule implements SubmitRule { - private final AtomicBoolean block = new AtomicBoolean(true); + private Optional recordStatus = Optional.empty(); public void block(boolean block) { - this.block.set(block); + this.status(block ? Optional.of(SubmitRecord.Status.NOT_READY) : Optional.empty()); + } + + public void status(Optional status) { + this.recordStatus = status; } @Override public Optional evaluate(ChangeData changeData) { - if (block.get()) { + if (this.recordStatus.isPresent()) { SubmitRecord record = new SubmitRecord(); record.labels = new ArrayList<>(); - record.status = SubmitRecord.Status.NOT_READY; + record.status = this.recordStatus.get(); record.requirements = ImmutableList.of(req); return Optional.of(record); } diff --git a/polygerrit-ui/app/rollup.config.js b/polygerrit-ui/app/rollup.config.js index c8e9baa98c..d93b5eab39 100644 --- a/polygerrit-ui/app/rollup.config.js +++ b/polygerrit-ui/app/rollup.config.js @@ -69,7 +69,13 @@ export default { output: { format: 'iife', compact: true, - plugins: [terser()] + plugins: [ + terser({ + output: { + comments: false + } + }) + ] }, //Context must be set to window to correctly processing global variables context: 'window',