Require all BatchUpdates executed are from different projects
Change-Id: Iedacf9da9eb82e200d44d3b501c98b034f8a3f02
This commit is contained in:
@@ -17,12 +17,14 @@ package com.google.gerrit.server.update;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static com.google.common.collect.ImmutableMultiset.toImmutableMultiset;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
import com.google.common.collect.MultimapBuilder;
|
||||
import com.google.common.collect.Multiset;
|
||||
import com.google.gerrit.common.Nullable;
|
||||
import com.google.gerrit.extensions.config.FactoryModule;
|
||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||
@@ -129,6 +131,7 @@ public abstract class BatchUpdate implements AutoCloseable {
|
||||
boolean dryRun)
|
||||
throws UpdateException, RestApiException {
|
||||
checkNotNull(listener);
|
||||
checkDifferentProject(updates);
|
||||
// It's safe to downcast all members of the input collection in this case, because the only
|
||||
// way a caller could have gotten any BatchUpdates in the first place is to call the create
|
||||
// method above, which always returns instances of the type we expect. Just to be safe,
|
||||
@@ -144,6 +147,15 @@ public abstract class BatchUpdate implements AutoCloseable {
|
||||
ReviewDbBatchUpdate.execute(reviewDbUpdates, listener, requestId, dryRun);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkDifferentProject(Collection<BatchUpdate> updates) {
|
||||
Multiset<Project.NameKey> projectCounts =
|
||||
updates.stream().map(u -> u.project).collect(toImmutableMultiset());
|
||||
checkArgument(
|
||||
projectCounts.entrySet().size() == updates.size(),
|
||||
"updates must all be for different projects, got: %s",
|
||||
projectCounts);
|
||||
}
|
||||
}
|
||||
|
||||
static void setRequestIds(
|
||||
|
||||
Reference in New Issue
Block a user