Remove mutable ReceiveCommits#newChanges
Change-Id: I6ed555f5881aab69141237fd62a05c3b150f6c1a
diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
index 6ca172d..6879ec6 100644
--- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
+++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
@@ -382,7 +382,6 @@
private final List<ReceiveCommand> actualCommands;
// Collections lazily populated during processing.
- private List<CreateRequest> newChanges;
private ListMultimap<Change.Id, Ref> refsByChange;
private ListMultimap<ObjectId, Ref> refsById;
@@ -509,9 +508,6 @@
updateGroups = new ArrayList<>();
validCommits = new HashSet<>();
- // Collections lazily populated during processing.
- newChanges = Collections.emptyList();
-
// Other settings populated during processing.
newChangeForAllNotInTarget =
projectState.is(BooleanProjectConfig.CREATE_NEW_CHANGE_FOR_ALL_NOT_IN_TARGET);
@@ -576,11 +572,13 @@
}
logError(String.format("Failed to process refs in %s", project.getName()), err);
}
+
+ List<CreateRequest> newChanges = Collections.emptyList();
if (magicBranch != null && magicBranch.cmd.getResult() == NOT_ATTEMPTED) {
- selectNewAndReplacedChangesFromMagicBranch();
+ newChanges = selectNewAndReplacedChangesFromMagicBranch();
}
- preparePatchSetsForReplace();
- insertChangesAndPatchSets();
+ preparePatchSetsForReplace(newChanges);
+ insertChangesAndPatchSets(newChanges);
newProgress.end();
replaceProgress.end();
@@ -633,10 +631,10 @@
closeProgress.end();
commandProgress.end();
progress.end();
- reportMessages();
+ reportMessages(newChanges);
}
- private void reportMessages() {
+ private void reportMessages(List<CreateRequest> newChanges) {
List<CreateRequest> created =
newChanges.stream().filter(r -> r.change != null).collect(toList());
if (!created.isEmpty()) {
@@ -715,7 +713,7 @@
}
}
- private void insertChangesAndPatchSets() {
+ private void insertChangesAndPatchSets(List<CreateRequest> newChanges) {
ReceiveCommand magicBranchCmd = magicBranch != null ? magicBranch.cmd : null;
if (magicBranchCmd != null && magicBranchCmd.getResult() != NOT_ATTEMPTED) {
logWarn(
@@ -1790,9 +1788,9 @@
return true;
}
- private void selectNewAndReplacedChangesFromMagicBranch() {
+ private List<CreateRequest> selectNewAndReplacedChangesFromMagicBranch() {
logDebug("Finding new and replaced changes");
- newChanges = new ArrayList<>();
+ List<CreateRequest> newChanges = new ArrayList<>();
ListMultimap<ObjectId, Ref> existing = changeRefsById();
GroupCollector groupCollector =
@@ -1801,7 +1799,7 @@
try {
RevCommit start = setUpWalkForSelectingChanges();
if (start == null) {
- return;
+ return Collections.emptyList();
}
LinkedHashMap<RevCommit, ChangeLookup> pending = new LinkedHashMap<>();
@@ -1877,8 +1875,7 @@
reject(
magicBranch.cmd,
"the number of pushed changes in a batch exceeds the max limit " + maxBatchChanges);
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
}
if (commitAlreadyTracked) {
@@ -1904,9 +1901,8 @@
c,
null)) {
// Not a change the user can propose? Abort as early as possible.
- newChanges = Collections.emptyList();
logDebug("Aborting early due to invalid commit");
- return;
+ return Collections.emptyList();
}
// Don't allow merges to be uploaded in commit chain via all-not-in-target
@@ -1943,8 +1939,7 @@
if (newChangeIds.contains(p.changeKey)) {
logDebug("Multiple commits with Change-Id %s", p.changeKey);
reject(magicBranch.cmd, SAME_CHANGE_ID_IN_MULTIPLE_CHANGES);
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
}
List<ChangeData> changes = p.destChanges;
@@ -1960,8 +1955,7 @@
// this error message as Change-Id should be unique per branch.
//
reject(magicBranch.cmd, p.changeKey.get() + " has duplicates");
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
}
if (changes.size() == 1) {
@@ -1985,15 +1979,13 @@
if (requestReplace(magicBranch.cmd, false, changes.get(0).change(), p.commit)) {
continue;
}
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
}
if (changes.size() == 0) {
if (!isValidChangeId(p.changeKey.get())) {
reject(magicBranch.cmd, "invalid Change-Id");
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
}
// In case the change look up from the index failed,
@@ -2001,8 +1993,7 @@
if (foundInExistingRef(existing.get(p.commit))) {
if (pending.size() == 1) {
reject(magicBranch.cmd, "commit(s) already exists (as current patchset)");
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
}
itr.remove();
continue;
@@ -2020,22 +2011,20 @@
//
magicBranch.cmd.setResult(REJECTED_MISSING_OBJECT);
logError("Invalid pack upload; one or more objects weren't sent", e);
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
} catch (OrmException e) {
logError("Cannot query database to locate prior changes", e);
reject(magicBranch.cmd, "database error");
- newChanges = Collections.emptyList();
- return;
+ return Collections.emptyList();
}
if (newChanges.isEmpty() && replaceByChange.isEmpty()) {
reject(magicBranch.cmd, "no new changes");
- return;
+ return Collections.emptyList();
}
if (!newChanges.isEmpty() && magicBranch.edit) {
reject(magicBranch.cmd, "edit is not supported for new changes");
- return;
+ return newChanges;
}
try {
@@ -2056,8 +2045,8 @@
} catch (OrmException e) {
logError("Error collecting groups for changes", e);
reject(magicBranch.cmd, "internal server error");
- return;
}
+ return newChanges;
}
private boolean foundInExistingRef(Collection<Ref> existingRefs) throws OrmException {
@@ -2323,7 +2312,7 @@
}
}
- private void preparePatchSetsForReplace() {
+ private void preparePatchSetsForReplace(List<CreateRequest> newChanges) {
try {
readChangesForReplace();
for (Iterator<ReplaceRequest> itr = replaceByChange.values().iterator(); itr.hasNext(); ) {