Fail review command if multiple changes are selected
If a change is not uniquely identified the review
command has to fail, otherwise is not possible
to determine to which change the review has been
posted to.
Bug: Issue 320946495
Release-Notes: Fail review command if multiple changes are selected
Change-Id: Icbae6362f9915f412b1bfa7d228823fc3d32b1c7
diff --git a/java/com/google/gerrit/sshd/commands/ReviewCommand.java b/java/com/google/gerrit/sshd/commands/ReviewCommand.java
index 26dee04..21bdfbb 100644
--- a/java/com/google/gerrit/sshd/commands/ReviewCommand.java
+++ b/java/com/google/gerrit/sshd/commands/ReviewCommand.java
@@ -34,6 +34,7 @@
import com.google.gerrit.extensions.api.changes.RestoreInput;
import com.google.gerrit.extensions.api.changes.ReviewInput;
import com.google.gerrit.extensions.api.changes.RevisionApi;
+import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.json.OutputFormat;
import com.google.gerrit.server.DynamicOptions;
@@ -56,11 +57,13 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
+import java.util.stream.Collectors;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.Option;
@@ -261,6 +264,19 @@
"Deprecated usage of review command: missing project for change number %d, patchset %d",
patchSet.id().changeId().get(), patchSet.number());
}
+ int changeNumber = patchSet.id().changeId().get();
+ String query = "change: " + changeNumber;
+ List<ChangeInfo> changeInfos = gApi.changes().query(query).get();
+ if (changeInfos.size() > 1) {
+ throw die(
+ String.format(
+ "Multiple changes (%d) found for change number %d in projects: %s",
+ changeInfos.size(),
+ changeNumber,
+ changeInfos.stream()
+ .map(ci -> ci.project)
+ .collect(Collectors.joining(", "))));
+ }
gApi.changes()
.id(patchSet.id().changeId().get())
.revision(patchSet.number())